2016-05-07 3 views
1

У меня есть таблица MySQL, как это:Два MySQL выбирает в одном запросе - один за другим

+----+------+ 
| id | rank | 
+----+------+ 
| 1 | 2 | 
+----+------+ 
| 2 | -1 | 
+----+------+ 
| 3 | 5 | 
+----+------+ 
| 4 | 1 | 
+----+------+ 
| 5 | -1 | 
+----+------+ 
| 6 | -1 | 
+----+------+ 
| 7 | 8 | 
+----+------+ 
| 8 | -1 | 
+----+------+ 

Теперь я хочу, чтобы получить идентификаторы в следующем порядке: На первом

WHERE rank >= 1 ORDER BY rank ASC 

и потом:

WHERE rank = -1 

Как я могу получить это только в одном mysql_query()?

+0

почему бы не написать 2 запросов? –

+3

ORDER BY CASE WHEN rank> = 1 THEN 0 ELSE 1, rank – Mihai

+0

Сложно. Остальная часть структуры кода ожидает всего один запрос. Если я не смогу найти решение, я отредактирую его и воспользуюсь двумя запросами. Но это будет много работы, поэтому лучше спросите раньше. ;) – user3362305

ответ

1

Попробуйте что-то вроде:

SELECT * 
FROM mytable 
WHERE rank >= 1 
ORDER BY rank 
UNION 
SELECT * 
FROM mytable 
WHERE rank = -1 

или что-то вроде:

SELECT * 
FROM mytable 
WHERE rank >= 1 
ORDER BY CASE WHEN rank>=1 
       THEN 0 
       ELSE 1,rank 
0

Предложенный ответ:

SELECT id FROM myTable WHERE rank >= 1 ORDER BY rank ASC 
UNION 
SELECT id FROM myTable WHERE rank = -1 

В моем понимании, вы хотите столбец идентификаторов, начиная с идентификаторами WHERE rank >= 1 ORDER BY rank ASC и заканчивая идентификатором s WHERE rank = -1.

Предыдущий запрос sql использует UNION, который объединяет две результирующие таблицы из отдельных запросов SELECT. UNION может применяться только в том случае, если у вас есть один и тот же набор генерируемых столбцов из каждого запроса SELECT, так что это хорошая мысль, чтобы иметь в виду, если позже вы захотите увеличить количество полученных столбцов.

0

Вы также можете составить карту с ELT.

образец

SELECT * 
FROM mytable 
ORDER BY ELT(rank+2,99,0,1,2,3,4,5,6,7,8) ASC;