php 按外表中的相关行数对MySQL结果进行排序

gkn4icbw  于 2023-02-21  发布在  PHP
关注(0)|答案(2)|浏览(121)

好的,我有一个表,在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。但由于它是一个完全不同的表的计数,我不知道如何去做。

mklgxw1f

mklgxw1f1#

有一个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中是否能像这样工作,如果不能,就把除了最后一行之外的所有行放在一个子查询中。

uqcuzwp8

uqcuzwp82#

而是查询到由$boots索引的数组中的结果。
又名:

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

}

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

相关问题