Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 最大(id)和限制10,但在不同的位置使用它们_Php_Mysql_Arrays_Limit_Fetch - Fatal编程技术网

Php 最大(id)和限制10,但在不同的位置使用它们

Php 最大(id)和限制10,但在不同的位置使用它们,php,mysql,arrays,limit,fetch,Php,Mysql,Arrays,Limit,Fetch,我有两张桌子、两篇文章和两个部分。我想得到最后10篇文章,其中section=1, 但是在不同的地方使用这10个结果。我做了一个函数: function sectionposts($section_id){ mysql_set_charset('utf8'); $maxpost1 ="SELECT max(id) from posts WHERE section_id = $section_id ORDER BY ID DESC LIMIT 20"; $maxpost12 =mysql

我有两张桌子、两篇文章和两个部分。我想得到最后10篇文章,其中section=1, 但是在不同的地方使用这10个结果。我做了一个函数:

     function sectionposts($section_id){
mysql_set_charset('utf8');
$maxpost1 ="SELECT max(id) from posts WHERE section_id = $section_id ORDER BY ID DESC LIMIT 20";
$maxpost12 =mysql_query($maxpost1);
while ($maxpost_rows = mysql_fetch_array($maxpost12 ,MYSQL_BOTH)){
$maxpost2 = $maxpost_rows[0];
}
$query = "SELECT * FROM posts WHERE id = $maxpost2";
$query2 = mysql_query($query);
return $query2;
}
$query2 = sectionposts(6);
while ($rows = mysql_fetch_array($query2)){
echo $rows['title'] . "<br/>" . "<br/>";
echo $rows['id'] . "<br/>" . "<br/>";
echo $rows['image_section'] . "<br/>";
echo $rows['subject'] . "<br/>";
echo $rows['image_post'] . "<br/>";
}
功能分区所($section\u id){
mysql_集_字符集('utf8');
$maxpost1=“从文章中选择max(id),其中section\u id=$section\u id ORDER BY id DESC LIMIT 20”;
$maxpost12=mysql\u查询($maxpost1);
而($maxpost\u rows=mysql\u fetch\u数组($maxpost12,mysql\u两者)){
$maxpost2=$maxpost_行[0];
}
$query=“SELECT*FROM posts,其中id=$maxpost2”;
$query2=mysql\u query($query);
返回$query2;
}
$query2=分区所(6);
而($rows=mysql\u fetch\u数组($query2)){
echo$rows['title']。“

”; echo$rows['id']。“

”; echo$rows['image_section']。“
”; echo$rows['subject']。“
”; echo$rows['image_post']。“
”; }
它怎么能把这十个结果用在不同的地方,并把它们从一个排列到十个

这是一个旧案例,我解决了它,但我发现了另一个问题,如果客户端删除了一个id=800的帖子“所以DB中没有id=800”,那么当我从中得到最大id减去$NUM时,这个操作必须等于id=800,所以我这里有一个编程错误,我如何处理类似的事情

    function getmax_id_with_minus ($minus){
    mysql_set_charset('utf8');
    $maxid ="SELECT max(id) FROM posts";
    $maxid1 =mysql_query($maxid);
        while ($maxid_row = mysql_fetch_array($maxid1)){
                $maxid_id = $maxid_row['0'];
                $maxid_minus = $maxid_id - $minus;
                }
    $selectedpost1 = "SELECT * FROM posts WHERE id = $maxid_minus";
    $query_selectedpost =mysql_query($selectedpost1);
        return ($query_selectedpost);

}
<?php 
$ss = getmax_id_with_minus (8);
while ($rows = mysql_fetch_assoc($ss)){
$main_post_1 = $rows;
?>
函数getmax\u id\u加上减号($减号){
mysql_集_字符集('utf8');
$maxid=“从帖子中选择最大(id)”;
$maxid1=mysql\u查询($maxid);
而($maxid\u row=mysql\u fetch\u数组($maxid1)){
$maxid_id=$maxid_行['0'];
$maxid\u减号=$maxid\u减号-$减号;
}
$selectedpost1=“从帖子中选择*,其中id=$maxid\u减号”;
$query\u selectedpost=mysql\u query($selectedpost1);
返回($query\u selectedpost);
}

不管怎样,“真的”再次感谢:)

似乎要将它们存储在一个数组中

 $posts = array(); //put this before the while loop. 
 $posts[] = $row; //put this in the while loop

请尝试以下方法,以节省大量无意义的代码:

$sql = "SELECT * FROM posts WHERE section_id=$section_id HAVING bar=MAX(bar);"
$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($result);
echo ...;
echo ...;

having
子句允许您在单个操作中查找max记录,而不需要两个查询版本固有的快速性。除非您允许具有相同ID的多条记录污染您的表,否则删除while()循环也会使内容更加清晰。

关于发布代码的一些想法:

  • 首先也是最重要的一点是,您应该停止使用mysql函数,因为它们现在很容易受到SQL注入的攻击
  • 当您
    选择
    最大值
    最小值
    计数
    平均值
    。。。如果函数只返回一行,则不需要
    ORDER BY
    LIMIT

  • 考虑到您只需要
    MAX(id)
    ,您可以通过如下方式组合查询来节省工作:

如果我理解您试图执行的操作(如果我错了,请纠正我),您的函数将如下所示:

function sectionposts($section_id) {
    $link = mysqli_connect("localhost", "my_user", "my_password", "world");

    $stmt = mysqli_prepare($link, "SELECT title, id, image_section, subject, image_post FROM posts " 
        . "WHERE section_id = ? ORDER BY id DESC LIMIT 10");
    mysqli_stmt_bind_param($stmt, $section_id);
    return mysqli_query($link, $stmt)
}

$result = sectionposts(6);
while ($row = mysqli_fetch_assoc($result)) {
    echo $rows['title'] . "<br /><br />";
    echo $rows['id'] . "<br /><br />";
    echo $rows['image_section'] . "<br />";
    echo $rows['subject'] . "<br />";
    echo $rows['image_post'] . "<br />";
}
功能分区所($section\u id){
$link=mysqli_connect(“本地主机”、“我的用户”、“我的密码”、“世界”);
$stmt=mysqli\u prepare($link,“从帖子中选择标题、id、图片部分、主题、图片帖子”
“其中第_节id=?按id说明的订单限制10”);
mysqli_stmt_bind_param($stmt,$section_id);
返回mysqli_查询($link,$stmt)
}
$result=分区所(6);
while($row=mysqli\u fetch\u assoc($result)){
echo$rows['title']。“

”; echo$rows['id']。“

”; echo$rows['image_section']。“
”; echo$rows['subject']。“
”; echo$rows['image_post']。“
”; }
um,。。这是一个类似以下函数的函数:sectionposts($section_id){mysql_set_charset('utf8');$posts=array();$maxpost1=“从posts中选择max(id),其中section_id=$section_id ORDER BY id DESC LIMIT 10”$maxpost12=mysql_query($maxpost1)}$query2=分区所(6);虽然($rows=mysql_fetch_array($query2)){$posts[]=$rows;好的,但是我将如何得到结果呢?echo$rows['title'];echo$rows['id'];echo$rows['image_section'];echo$rows['subject'];echo$rows['image_post']谢谢michael@michael-wheeler我不相信OP想要将结果放入数组,因为他们正在获取结果集并使用
while
循环来显示它。你为什么要使用
mysql\u query
?你有一些cargo cult编程。你的max()查询只能返回一行,因为您没有使用group by子句。因此,用于获取结果的while()循环是毫无意义的。此外,代码是快速的-在执行max()操作之间,可以将另一条记录插入数据库查询并在while循环上获取实际的max record.dito以显示结果-除非出现多个重复ID,否则只能得到一行,这使得while()循环毫无意义。
SELECT * FROM posts 
WHERE id = (SELECT MAX(id) from posts WHERE section_id = $section_id)
function sectionposts($section_id) {
    $link = mysqli_connect("localhost", "my_user", "my_password", "world");

    $stmt = mysqli_prepare($link, "SELECT title, id, image_section, subject, image_post FROM posts " 
        . "WHERE section_id = ? ORDER BY id DESC LIMIT 10");
    mysqli_stmt_bind_param($stmt, $section_id);
    return mysqli_query($link, $stmt)
}

$result = sectionposts(6);
while ($row = mysqli_fetch_assoc($result)) {
    echo $rows['title'] . "<br /><br />";
    echo $rows['id'] . "<br /><br />";
    echo $rows['image_section'] . "<br />";
    echo $rows['subject'] . "<br />";
    echo $rows['image_post'] . "<br />";
}