#php #mysql #sql
#php #mysql #sql
Вопрос:
Итак, чего я хочу, так это разместить пользователей, у которых нет изображения профиля, в САМОМ низу страницы.
но если у них есть изображение, то оно пропускает их и добавляет к следующим правилам
SELECT users.id as id, users.username as username,
DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(userprofiles.birthdate)), '%Y') 0 AS age,
userprofiles.defaultpictureid as picture, city.City
FROM users,
userprofiles,
Cities as city
WHERE users.id = userprofiles.userid
AND city.CityId = userprofiles.city
AND userprofiles.online = '1'
AND userprofiles.country = ".$this->country."
AND userprofiles.state = ".$this->state."
ORDER BY if (userprofiles.city = ".$this->city.",0,1) AND userprofiles.membertype DESC
Ответ №1:
Возможно, я неправильно понимаю вопрос, поскольку у вас уже есть концепция IF
внутри order by
, но это должно сработать, предполагая, что defaultpictureid равен нулю, когда у пользователя нет изображения
....
ORDER BY
if( userprofiles.defaultpictureid is null,1,0),
if (userprofiles.city = ".$this->city.",0,1)
....
В некоторых базах данных нет такого оператора IF, как этот. В тех, которые этого не делают, у них обычно есть case (у mysql есть и то, и другое)
ORDER BY
CASE WHEN userprofiles.defaultpictureid is null THEN 1 ELSE 0 END,
это также полезно, когда у вас больше значений, чем просто 1 и 0, и вы не хотите выполнять вложенные ifs
Комментарии:
1. Я думаю, что использование
AND
в ЗАКАЗЕ BY также может быть проблемой.2. Если я не ошибаюсь, MySQL должен позволять вам делать что-то вроде этого:
ORDER BY userprofiles.defaultpictureid is null, ... (other criteria)
.