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,我将sendind 5作为$ lastOutputId作为参数,我想将此查询作为5到5 + 5运行,并且在同一个查询中方式,下一个查询将运行限制10到15.我怎么能这样做?
答案 0 :(得分:3)
LIMIT可能有2个参数。在我们的例子中,我认为你可以像这样使用LIMIT:
LIMIT $lastOutputId, 5
答案 1 :(得分:2)
mysql中的limit选项可以带两个参数,start,length。因此你可以这样做:
limit 0,5
获得前5个
limit 5,5
获得下一个5
limit 10,5
获取下一个等等。您只需根据lastOutputId设置第一个数字。
答案 2 :(得分:1)
我同意上述答案,LIMIT采用2个参数或1:
我出于性能原因警告这种方法。
每当您的网站需要5行时,SQL SELECT语句将遍历所有MySQL服务器软件层(连接,身份验证,查询解析,查询结果缓存,存储引擎,结果序列化)。
从某个地方选择某些东西LIMIT 1000000,10实际上会从表中读取1,000,010条记录,从而导致存储引擎出现大量负载!结果序列化中只忽略前1M行。
在一个查询中获取整个数据并将结果保存在Web服务器上的本地内存或memcached等共享易失性存储中可能更有效。
答案 3 :(得分:0)
class celeb {
public function getAllCelebDataFinal ($database,$celebrityId,$lastOutputId, $limit)
// Your query
}
}
$numberOfRepeat = 5; //just example
$limit = new Celeb();
$limit->getAllCelebDataFinal($val, $val, $val, $val);
}
然后将对象放在foreach循环中,通过按钮或get变量使该数字动态化,然后就完成了:)
答案 4 :(得分:0)
$limit = $_REQUEST['limit'];
$start = $_REQUEST['start'];
$getRec = "SELECT * FROM MyUser LIMIT $start , $limit";