1
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 到 15 的限制运行。我该怎么做?

4

5 回答 5

3

LIMIT 可能有 2 个参数。在我们的例子中,我认为您可以像这样使用 LIMIT :

LIMIT $lastOutputId, 5

文档: http: //php.about.com/od/mysqlcommands/g/Limit_sql.htm

于 2013-03-28T11:59:20.617 回答
2

mysql中的limit选项可以带两个参数,start,length。因此你可以这样做:

limit 0,5

获得前 5 个

limit 5,5

获得下一个 5

limit 10,5

获得下一个等。您只需要根据您的 lastOutputId 设置第一个数字。

于 2013-03-28T11:59:19.847 回答
1

我同意上面的答案,LIMIT 采用 2 个参数或 1 个参数:

  • SELECT ... LIMIT 偏移量 num_records
  • SELECT ... LIMIT num_records --> 相当于 LIMIT 0 num_records

不过,出于性能原因,我确实警告不要使用这种方法。

每次您的网站需要 5 行时,一条 SQL SELECT 语句都会遍历所有 MySQL 服务器软件层(连接、身份验证、查询解析、查询结果缓存、存储引擎、结果序列化)。

SELECT something FROM something LIMIT 1000000,10 实际上会从表中读取 1,000,010 条记录,从而对存储引擎造成很大的负载!结果序列化中仅忽略前 1M 行。

在一个查询中获取全部数据并将结果保存在 Web 服务器上的本地内存或共享的易失性存储(如 memcached)中可能更有效。

于 2013-03-28T12:09:21.900 回答
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 变量使该数字动态化,您就完成了:)

于 2013-03-28T12:02:34.113 回答
0
$limit = $_REQUEST['limit'];
$start = $_REQUEST['start'];

$getRec = "SELECT * FROM MyUser LIMIT $start , $limit";
于 2013-03-28T12:08:04.220 回答