Упорядочение по количеству строк? - PullRequest
1 голос
/ 12 мая 2010

Хорошо, у меня есть таблица, выводящая данные из таблицы MySQL в цикле while. Итак, один из столбцов, которые он выводит, не хранится в таблице статически, а представляет собой сумму того, сколько раз он появляется в другой таблице 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 ]

3 голосов
/ 12 мая 2010

Существует операция 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. Если это не так, просто поместите все, кроме последней строки в подзапросе.

0 голосов
/ 12 мая 2010

Но результат запроса в массив, проиндексированный $ boots.

AKA:

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

}

Вы можете переключаться между ksort и krsort, чтобы переключать ордера, но в основном вы создаете массив с ключом по номеру в $boot, сортируете этот массив по этому номеру и затем просматриваете каждую группу записи, имеющие определенное значение $boot.

...