MYSQL помещает пользователей без изображения профиля внизу, но всех остальных по-прежнему с помощью свойств другого порядка

#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) .