Php 最大(id)和限制10,但在不同的位置使用它们
我有两张桌子、两篇文章和两个部分。我想得到最后10篇文章,其中section=1, 但是在不同的地方使用这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
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 />";
}