Порядок и лимит - PullRequest
       15

Порядок и лимит

5 голосов
/ 03 февраля 2010

В таблице, содержащей города, я хочу получить пять крупнейших городов и упорядочить их по имени:

SELECT * FROM cities ORDER BY population DESC LIMIT 5

Это дает мне самые большие города, упорядоченные по населению, но я хочу, чтобы те же города упорядочивались по названию. Есть ли простой способ сделать это (не обращаясь к подзапросу и не сортируя города потом с помощью PHP)?

Ответы [ 6 ]

9 голосов
/ 03 февраля 2010

Я думаю, что вы хотите это:

( SELECT * FROM cities ORDER BY population DESC LIMIT 5 ) ORDER BY name;
1 голос
/ 03 февраля 2010
SELECT * FROM cities ORDER BY population desc, name LIMIT 5
0 голосов
/ 03 февраля 2010
mysql> create temporary table temp ( ID int );
mysql> insert into temp select ID from cities order by population desc limit 5;
mysql> select a.* from cities a,temp b where a.ID=b.ID order by Name;

Временные таблицы удаляются при закрытии соединения или могут быть удалены вручную. Временные таблицы не видны из других соединений. Нормальный способ будет (но пока не поддерживается):

mysql> select * from cities where ID in (select ID from cities order by population desc limit 5) order by Name;

Но ответ таков:

ERROR 1235 (42000): This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

(пробовал с 5.0.5)

0 голосов
/ 03 февраля 2010

Вам понадобится подзапрос:

SELECT a.* 
FROM (
    SELECT * 
    FROM cities 
    ORDER BY population DESC 
    LIMIT 5
) a 
ORDER BY name;

РЕДАКТИРОВАТЬ: Только что увидел, что вы не хотите подзапрос. Почему бы и нет? Это эффективный запрос, который будет возвращаться очень быстро (должен быть индекс по населению с подзапросом или без него).

0 голосов
/ 03 февраля 2010

Просто сделай

SELECT y.*
  FROM (SELECT name FROM cities ORDER BY population DESC LIMIT 5) AS x,
       cities AS y
 WHERE x.name = y.name
 ORDER BY y.name

Вот и все.

Приветствие.

0 голосов
/ 03 февраля 2010
SELECT * FROM cities ORDER BY population DESC, name LIMIT 5

Вы пробовали это? Я думаю, что это может работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...