mysql, order-by, проверьте и включите ли элемент в другую таблицу первым - PullRequest
1 голос
/ 20 января 2011

MySQL:

table1

+--------+-------+
| itemid | title |
+--------+-------+
|   1    | title |
+--------+-------+

table2

+----+--------+------------+
| id | itemid |    time    |
+----+--------+------------+
|  1 |    1   | 1295116368 |
+----+--------+------------+
|  1 |    2   | 1295548368 |
+----+--------+------------+
|  2 |    1   | 1294079568 |
+----+--------+------------+

PHP:

$a = mysql_query("SELECT `itemid` FROM `table2` WHERE `id` = '1' ORDER BY `time` DESC")
while($b = mysql_fetch_assoc($a))
{
    echo $b['itemid'].'<br />';
}

Выход:

2
1

Однако в приведенном выше запросе я также хочу проверить, включен ли itemid в table1 , потому что, когда это так, я хочу, чтобы он отображался первым, несмотря на то, что он мог быть старым постом.

Надеюсь, это имеет смысл.

Итак, вывод должен быть:

1
2

, поскольку itemid = 1, также включен в table1.

Ответы [ 3 ]

3 голосов
/ 20 января 2011

Я считаю, что вы должны иметь возможность объединять таблицы и сортировать по заголовку

SELECT itemid FROM table2
LEFT JOIN table1 USING (itemid) 
WHERE id = '1' ORDER BY title DESC, time DESC

Возможно, вам придется переключить сортировку по заголовку, я не помню, сортируются ли значения NULL в началеили конец.

1 голос
/ 20 января 2011

Вы можете присоединиться к таблице1 с помощью левого соединения, а затем сначала сделать заказ по item_id таблицы1, а затем по времени в таблице2:

  SELECT  t2.item_id
  FROM    table2 t2 LEFT JOIN table1 t1 ON t1.item_id = t2.item_id
  WHERE   t2.id = 1
  ORDER BY IFNULL(t1.item_id, 'a') ASC, t2.time DESC

ПРИМЕЧАНИЕ. Я использую IFNULL в предложении order by, чтобы значения NULL упорядочивались последними.

1 голос
/ 20 января 2011

Использование:

SELECT `itemid` FROM `table2` t2 LEFT JOIN `table1` t1
ON t2.itemid = t1.itemid WHERE t2.`id` = '1' ORDER BY t1.itemid, t2.`time` DESC
...