首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mySQL中动态更改限制

问如何在mySQL中动态更改限制
EN

Stack Overflow用户
提问于 2013-03-28 19:53:49
回答 5查看 3K关注 0票数 1
代码语言:javascript
复制
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的限制运行。我该怎么做呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-03-28 19:59:21

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

代码语言:javascript
复制
LIMIT $lastOutputId, 5

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

票数 3
EN

Stack Overflow用户

发布于 2013-03-28 19:59:20

mysql中的limit选项可以接受两个参数: start和length。因此,您可以这样做:

代码语言:javascript
复制
limit 0,5

要获得前5个

代码语言:javascript
复制
limit 5,5

要获得下一个5

代码语言:javascript
复制
limit 10,5

你只需要根据你的lastOutputId设置第一个数字即可。

票数 2
EN

Stack Overflow用户

发布于 2013-03-28 20:09:22

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

  • 选择...限制偏移量num_records
  • SELECT ...LIMIT num_records -->等同于LIMIT 0 num_records

不过,出于性能原因,我对这种方法提出了警告。

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

从某处选择某项限制1000000,10实际上将从表中读取1,000,010条记录,这会对存储引擎造成很大的负载!前1M行在结果序列化中被忽略。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15681092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档