繁体   English   中英

如何在MySQL中动态更改Limit

[英]How to change Limit dynamically in mySQL

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的范围运行。我该怎么办?

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

LIMIT $lastOutputId, 5

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

mysql中的limit选项可以采用两个参数,start,length。 因此,您可以执行以下操作:

limit 0,5

得到前5个

limit 5,5

得到下5个

limit 10,5

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

我同意以上答案,LIMIT使用2个参数或1个参数:

  • SELECT ... LIMIT偏移量num_records
  • SELECT ... LIMIT num_records->等效于LIMIT 0 num_records

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

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

从LIMIT 1000000,10的某处选择某项实际上将从表中读取1,000,010条记录,这给存储引擎带来了巨大的负担! 结果序列化只会忽略前1M行。

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

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变量使该数字动态化,就可以完成:)

$limit = $_REQUEST['limit'];
$start = $_REQUEST['start'];

$getRec = "SELECT * FROM MyUser LIMIT $start , $limit";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM