Php 如何在DESC MySQL中选择数字5-10
所以我想做两个while循环,因为我有两个表。在第一个表中,我想要前5个IDPhp 如何在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
`$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注入的可能性。实际上,我不知道这一点。非常感谢。