按行数排序?

时间:2010-05-12 04:00:34

标签: php mysql sql-order-by mysql-num-rows

好吧,所以我有一个表在while循环中从MySQL表输出数据。好吧,它输出的一列没有静态存储在表中,而是它在不同的 MySQL表中出现的次数的总和。

对不起,我不确定这很容易理解。这是我的代码:

    $query="SELECT * FROM list WHERE added='$addedby' ORDER BY time DESC";
    $result=mysql_query($query);
    while($row=mysql_fetch_array($result, MYSQL_ASSOC)){
$loghwid = $row['hwid'];

$sql="SELECT * FROM logs WHERE hwid='$loghwid' AND time < now() + interval 1 hour";
$query = mysql_query($sql) OR DIE(mysql_error());
$boots = mysql_num_rows($query);

//Display the table
    }

以上是显示表格的代码。

正如您所看到的,它正在从两个不同的MySQL表中获取数据。但是我希望能够ORDER BY $boots DESC。但由于它是一个完全不同的表,我不知道如何去做。

感谢您的帮助,谢谢。

2 个答案:

答案 0 :(得分:3)

有一个JOIN操作旨在......嗯... 加入两个不同的表。

SELECT list.hwid, COUNT(log.hwid) AS boots 
FROM list WHERE added='$addedby'
LEFT JOIN log ON list.hwid=log.hwid
GROUP BY list.hwid
ORDER BY boots

我不确定最后一行中的ORDER BY boots在MySQL中是否会像这样工作。如果没有,只需将最后一行放在子查询中。

答案 1 :(得分:0)

但是查询到$ boots索引的数组的结果。

AKA:

while(..){
    $boot = mysql_num_rows($query);
    $results[$boot][] = $result_array;
}
ksort($results);
foreach($results as $array)
{
    foreach($array as ....)
    {
          // display table
    }

}

您可以在ksortkrsort之间切换以切换订单,但基本上您正在创建一个由$boot中的数字键入的数组,按该数字对该数组进行排序,然后遍历具有特定$boot值的每组记录。