#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