Php 如何在DESC MySQL中选择数字5-10

Php 如何在DESC MySQL中选择数字5-10,php,mysql,sql,Php,Mysql,Sql,所以我想做两个while循环,因为我有两个表。在第一个表中,我想要前5个ID `$sql = "SELECT * FROM link WHERE `userid`= $uid ORDER by clicks DESC LIMIT 5";` 不要介意语句中的变量是不安全的,所以稍后我将使用一个准备好的语句。但是,在第一个while中,它应该给出前5个id,在第二个while中,它应该给出id 5-10。第二个$sql应该是什么样子?您需要像这样使用偏移量: 从链接中选择*userid`=$uid

所以我想做两个while循环,因为我有两个表。在第一个表中,我想要前5个ID

`$sql = "SELECT * FROM link WHERE `userid`= $uid ORDER by clicks DESC LIMIT 5";`

不要介意语句中的变量是不安全的,所以稍后我将使用一个准备好的语句。但是,在第一个while中,它应该给出前5个id,在第二个while中,它应该给出id 5-10。第二个$sql应该是什么样子?

您需要像这样使用偏移量:


从链接中选择*userid`=$uid ORDER by clicks DESC LIMIT 5 OFFSET 5

您需要像这样使用OFFSET:


从链接中选择*,其中`userid`=$uid ORDER by clicks DESC LIMIT 5 OFFSET 5

第二个SQL如下所示:

<?php
    ...
    $sql2 = "SELECT * FROM link WHERE userid = :uid ORDER by clicks DESC LIMIT 5 OFFSET 5";

    $stmt = $pdo->prepare(sql2);

    $stmt->execute(['uid ' => $uid]);
    ...
?>

第二个SQL如下所示:

<?php
    ...
    $sql2 = "SELECT * FROM link WHERE userid = :uid ORDER by clicks DESC LIMIT 5 OFFSET 5";

    $stmt = $pdo->prepare(sql2);

    $stmt->execute(['uid ' => $uid]);
    ...
?>

试试这个

$sql = "SELECT * FROM link WHERE `userid`= '$uid' ORDER by clicks DESC LIMIT 5, 5";
这将给出从记录编号6开始的5条记录(记录编号5将不会出现在结果中)

尝试这一条

$sql = "SELECT * FROM link WHERE `userid`= '$uid' ORDER by clicks DESC LIMIT 5, 5";

这将给出从记录编号6开始的5条记录(记录编号5不会出现在结果中)

只需在1个查询中使用2个循环即可。不需要额外的查询

例如,在
For
循环中:

<?php
    $results = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n");

    for($i=0; $i<5; $i++) {
        echo $results[$i];
    }

    echo " / ";

    for ($i=5; $i<10; $i++) {
        echo $results[$i];
    }
    // yields: abcde / fghij
?>
<?php
    $results = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n");
    $i = 0;
    while($i < 5) {
        echo $results[$i];
        $i++;
    } 

    echo " / "; 

    while($i < 10) {
        echo $results[$i];
        $i++;
    } 
    // yields: abcde / fghij
?>

只需在一个查询上使用两个循环。不需要额外的查询

例如,在
For
循环中:

<?php
    $results = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n");

    for($i=0; $i<5; $i++) {
        echo $results[$i];
    }

    echo " / ";

    for ($i=5; $i<10; $i++) {
        echo $results[$i];
    }
    // yields: abcde / fghij
?>
<?php
    $results = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n");
    $i = 0;
    while($i < 5) {
        echo $results[$i];
        $i++;
    } 

    echo " / "; 

    while($i < 10) {
        echo $results[$i];
        $i++;
    } 
    // yields: abcde / fghij
?>

看一看偏移量,谢谢你,为什么不加入呢,因为你使用了两个表?这个问题有点不清楚。如果没有(正确)索引任何表,2个循环可能会减慢速度。请使用
限制5,5
。第一个查询可以是
限制0,5
。(逗号之前是要“跳过”的行数。)如果两组行都在同一个响应中,我们通常不会运行两个单独的查询,而只运行一个查询来获取所有行
限制0,10,并处理“中断”在fetch循环中的五行。查看
偏移量
Daan谢谢你,为什么不加入呢,因为你使用了两个表?这个问题有点不清楚。如果没有(正确)索引任何表,2个循环可能会减慢速度。请使用
限制5,5
。第一个查询可以是
限制0,5
。(逗号之前是要“跳过”的行数。)如果两组行都在同一个响应中,我们通常不会运行两个单独的查询,而只运行一个查询来获取所有行
限制0,10
,并在fetch循环中处理五行的“中断”。您需要使用反勾,而不是引号。您的建议还保留了SQL注入的可能性。实际上,我不知道这一点。非常感谢。您需要使用反勾号,而不是引号。您的建议还保留了SQL注入的可能性。实际上,我不知道这一点。非常感谢。