Упорядочивание и предел

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

SELECT * FROM cities ORDER BY population DESC LIMIT 5

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

5
задан Machavity 13 February 2019 в 14:16
поделиться

6 ответов

SELECT * FROM cities ORDER BY population desc, name LIMIT 5
1
ответ дан 13 December 2019 в 22:07
поделиться

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

-121--3796738-

В PHP 5.4 + синтаксический анализатор был изменен, чтобы можно было сделать что-то подобное

(new Foo())->xyz();

Заключите экземпляр в круглые скобки и отключите цепочку.

До PHP 5.4, когда используется синтаксис

new Classname();

, невозможно выполнить цепочку вызова метода из экземпляра. Это ограничение синтаксиса PHP 5.3. После создания экземпляра объекта его можно удалить.

Один метод, который я видел, используется, чтобы обойти это статический метод создания экземпляров какого-то рода.

class Foo
{
    public function xyz()
    {
        echo "Called","\n";
        return $this;
    }

    static public function instantiate()
    {
        return new self();
    }
}


$a = Foo::instantiate()->xyz();

Заключив вызов в новый в статический метод, можно создать экземпляр класса с вызовом метода, и тогда вы можете отказаться от него.

-121--1004997-

Вам понадобится вложенный запрос:

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

EDIT: Только что вы видели, что вы не хотите вложенный запрос. Почему бы и нет? Это эффективный запрос, который будет возвращаться очень быстро (должен быть индекс заполнения с подзапросом или без него).

0
ответ дан 13 December 2019 в 22:07
поделиться
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
ответ дан 13 December 2019 в 22:07
поделиться
SELECT * FROM cities ORDER BY population DESC, name LIMIT 5

Вы пробовали это? Думаю, это сработает

0
ответ дан 13 December 2019 в 22:07
поделиться

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

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
ответ дан 13 December 2019 в 22:07
поделиться

Думаю, вам нужно следующее:

( SELECT * FROM cities ORDER BY population DESC LIMIT 5 ) ORDER BY name;
9
ответ дан 13 December 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: