MySQL заказ По вопросу - PullRequest
0 голосов
/ 26 апреля 2011

Привет, простой вопрос, я думаю, но не могу понять, как перечислить 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", "имя пользователя": "А", "картинка": "0"}, { "идентификатор": "1", "имя пользователя": "В", "картинка" : "0"}, { "идентификатор": "1", "имя пользователя": "В", "картинка": "1"}, { "идентификатор": "7", "имя пользователя": "А",» картина ":" 1" }]

Ответы [ 2 ]

2 голосов
/ 26 апреля 2011

Вы выбираете из двух таблиц (пользователей и профилей), но не указали никакой связи между тем, когда в предложении where, так что вы получаете декартово произведение этих двух, именно поэтому вы 'получаю повторяющиеся результаты.

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

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
0 голосов
/ 26 апреля 2011

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

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