Порядок MySQL по выпуску

#php #mysql #sql-order-by #row

#php #mysql #sql-order-by #строка

Вопрос:

Привет, простой вопрос, я думаю, но не могу понять, как перечислить mysql sql так, как я этого хочу.

В основном в одной строке у меня есть CityId, я хочу иметь возможность извлекать CityId, которые == 14, и показывать их в верхней части возвращаемого значения (НО НЕ В ВИДЕ КОЛИЧЕСТВА)

например, Перт == 15, Мельбурн == 14, Престон == 14, Сидней == 13

в настоящее время они отображаются следующим образом Сидней == 13 Перт == 15 Мельбурн == 14 Престон == 14

мой код


$sth = mysql_query("SELECT users.id as id, users.username as username, profile.defaultpictureid as picture FROM users, userprofiles as profile WHERE online = '1' AND profile.country = ".$this->country." AND profile.state = ".$this->state." AND profile.city = ".$this->city." ORDER BY if (profile.city = 12276,0,1)");

Приведенный выше код, похоже, теперь работает.

Однако также, похоже, выводит данные дважды.

[{«id»:»7″,»username»:»A»,»picture»:»0″},{«id»:»1″,»username»:»B»,»picture»:»0″},{«id»:»1″,»username»:»B»,»picture»:»1″},{«id»:»7″,»username»:»A»,»picture»:»1″}]

Комментарии:

1. Покажите нам запрос, который у вас есть на данный момент…

2. проблема, похоже, в профиле. defaultpictureid, который A должен == 0, а B должен возвращать 1

Ответ №1:

Вы выбираете из двух таблиц (users и profiles), но в вашем предложении where не указано никакого отношения между when, поэтому вы получаете декартово произведение двух, поэтому вы получаете дублированные результаты.

Я предполагаю, что ваш запрос должен выглядеть примерно так:

 SELECT users.id as id, users.username as username, profile.defaultpictureid as picture
FROM users, userprofiles as profile
WHERE
    online = 1 AND
    profile.country = {$this->country} AND
    profile.state = {$this->state} AND
    profile.city = {$this->city} AND 
    users.id = userprofiles.userid     <---the join condition for the two tables
ORDER BY if (CityID = 14, 1, 0), profile.city
  

Ответ №2:

Вы можете применить предложение if при сортировке

 order by if(CityID = 14,0,1)
  

Комментарии:

1. Только что попробовал это, и, к сожалению, это не сработало Вот мой код [code] $sth = mysql_query («SELECT users.id как идентификатор, users.username как имя пользователя, профиль. defaultpictureid как изображение ОТ пользователей, userprofiles как профиль, ГДЕ online = ‘1’ И profile.country = «.$this-> country». И profile.state = «.$this->state.» И profile. город = «.$this->город». УПОРЯДОЧИТЬ ПО if (profile. city = 12276,0,1)»);[/code]

2. это работает, но теперь возникла проблема с профилем. defaultpictureid