public function getAllCelebDataFinal ($database,$celebrityId,$lastOutputId)
{
$getalldata = $database->executeObjectList("
SELECT *
FROM (
(SELECT v.vidId, NULL as newsId, NULL as photoId, NULL as imageFile,
v.title as vidTitle, NULL as newsTitle, v.videoLink AS vidLink,
NULL as newsVidLink, NULL as newDetail , v.addDate
FROM videos v
WHERE v.celebrityId='".$celebrityId."' AND v.isPublished=1)
UNION ALL
(SELECT NULL as vidId, n.newsId,NULL as photoId,NULL as imageFile,
NULL as vidTitle, n.title as newsTitle, NULL AS vidLink,
n.videoLink as newsVidLink, n.details as newDetail,
n.addDate
FROM news n
WHERE n.celebrityId='".$celebrityId."' AND n.isPublished=1)
UNION ALL
(SELECT NULL as vidId,NULL as newsId,p.photoId,p.imageFile,
NULL as vidTitle, NULL as newsTitle, NULL AS vidLink,
NULL as newsVidLink, NULL as newDetail , p.addDate
FROM photos p
WHERE p.celebrityId='".$celebrityId."' AND p.isPublished=1)
) results
ORDER BY addDate DESC
LIMIT 5");
return $getalldata;
}假设这是第二个查询,如果我运行的第一个查询的限制是5,我将$lastOutputId 5作为参数发送给5+5,我想以5到10作为参数运行这个查询,以同样的方式,下一个查询将以10到15的限制运行。我该怎么做呢?
发布于 2013-03-28 19:59:21
LIMIT可以有2个参数。在我们的例子中,我认为你可以这样使用LIMIT:
LIMIT $lastOutputId, 5发布于 2013-03-28 19:59:20
mysql中的limit选项可以接受两个参数: start和length。因此,您可以这样做:
limit 0,5要获得前5个
limit 5,5要获得下一个5
limit 10,5你只需要根据你的lastOutputId设置第一个数字即可。
发布于 2013-03-28 20:09:22
我同意上面的答案,LIMIT采用2个参数或1个参数:
不过,出于性能原因,我对这种方法提出了警告。
每当您的网站需要5行代码时,SQL SELECT语句就会遍历所有MySQL服务器软件层(连接、验证、查询解析、查询结果缓存、存储引擎、结果序列化)。
从某处选择某项限制1000000,10实际上将从表中读取1,000,010条记录,这会对存储引擎造成很大的负载!前1M行在结果序列化中被忽略。
在一次查询中获取所有数据并将结果保存在web服务器上的本地内存或共享易失性存储(如memcached )中可能会更有效。
https://stackoverflow.com/questions/15681092
复制相似问题