Упорядочить записи по отметке времени, но с указанным идентификатором, указанным первым - PullRequest
1 голос
/ 01 июня 2011

MySQL

+----+------------+
| id | timestamp  |
+----+------------+
| 1  | 1306922400 |
+----+------------+
| 2  | 1306926000 |
+----+------------+
| 3  | 1306929600 |
+----+------------+

PHP

$a = mysql_query("SELECT * FROM `table` ORDER BY ?? DESC, `timestamp` DESC");

Упорядочить по:

  1. Начало, где id равно 2

  2. Тогда заказ по timestamp

Заказ должен быть: 2, 3, 1

Ответы [ 4 ]

1 голос
/ 01 июня 2011
SELECT * FROM `table` where id = 2
union 
SELECT * FROM `table` where id != 2 order by id, timestamp desc
1 голос
/ 01 июня 2011

вы могли бы использовать UNION ... Но я бы этого избегал.

$a = mysql_query("
                  (SELECT * FROM `table` WHERE id = 2 ) UNION 
                  (SELECT * FROM table ORDER BY timestamp DESC)
                ");

Учитывая, что я не использовал UNION ALL во втором запросе, запись с id = 2 не будет дублирована.

0 голосов
/ 01 июня 2011
$a = mysql_query("SELECT * FROM `table` WHERE id = 2 ORDER BY `timestamp` DESC UNION SELECT * FROM `table` WHERE id != 2 ORDER BY `timestamp DESC");
0 голосов
/ 01 июня 2011
SELECT * FROM `table` ORDER BY `id`!=2 ASC,  `timestamp` DESC
// or
SELECT * FROM `table` ORDER BY `id`=2 DESC,  `timestamp` DESC
...