В таблице, содержащей города, я хочу получить пять самых больших городов и заказать им по имени:
SELECT * FROM cities ORDER BY population DESC LIMIT 5
Это получает меня самые большие города, заказанные населением, но я хочу те же города, заказанные по имени. Существует ли простой способ сделать это (не обращаясь к подзапросу или сортируя города впоследствии с PHP)?
SELECT * FROM cities ORDER BY population desc, name LIMIT 5
Вы не говорите представлению, в каком состоянии оно должно анимироваться, чтобы оно ничего не сделало. Необходимо поместить код между beginAnimations: context:
и commitimAnimations
, который изменяет внешний вид представления (например, удаляя один вид и добавляя другой).
В 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: Только что вы видели, что вы не хотите вложенный запрос. Почему бы и нет? Это эффективный запрос, который будет возвращаться очень быстро (должен быть индекс заполнения с подзапросом или без него).
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)
SELECT * FROM cities ORDER BY population DESC, name LIMIT 5
Вы пробовали это? Думаю, это сработает
Просто сделай
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
Вот и все.
Ваше здоровье.
Думаю, вам нужно следующее:
( SELECT * FROM cities ORDER BY population DESC LIMIT 5 ) ORDER BY name;