我最近将2个查询合并为1(以优化性能)... 1个用于检查计数的查询,另一个用于检查结果,计数是为了确保它们在继续循环之前是实际结果。
继承PHP代码:
<?php
$query = 'SELECT id, title, COUNT(id) FROM submissions ORDER BY sub_time DESC LIMIT 50';
$result = mysql_query($query);
$count = mysql_result($result, 0, 2);
mysql_data_seek($result, 0); //mysql_result resets the internal pointer...
if ($count > 0) {
$i = 0;
while ($output = mysql_fetch_assoc($result)) {
++$i;
//etc..
}
}
?>
问题是它现在返回1个结果? - 当他们实际上有2个结果时(我通过PHPMyAdmin检查以及运行以下代码 - 见下文),我已经缩小了问题,因为COUNT(id)已经与初始结果查询相结合;它表现得像这样。
因为如果我执行以下操作:
<?php
$query = 'SELECT id, title FROM submissions ORDER BY sub_time DESC LIMIT 50';
$result = mysql_query($query);
$i = 0;
while ($output = mysql_fetch_assoc($result)) {
++$i;
//etc..
}
?>
它返回2个结果......
所以我的问题是我如何解决这个问题,但要实现我追求的目标?
答案 0 :(得分:2)
我建议您删除COUNT(id)并使用mysql_num_rows()
函数检查在尝试循环之前返回的行数。
您的代码可能如下所示:
<?php
$query = 'SELECT id, title FROM submissions ORDER BY sub_time DESC LIMIT 50';
$result = mysql_query($query);
$count = mysql_num_rows($result);
if ($count > 0) {
$i = 0;
while ($output = mysql_fetch_assoc($result)) {
++$i;
//etc..
}
}
答案 1 :(得分:1)
COUNT
是aggregate function,通常与GROUP BY
子句一起使用。我不相信它在您使用它时在查询中有意义。