Упорядочение по полю, только если оно существует - PullRequest
3 голосов
/ 06 марта 2012

Я пытаюсь получить всех пользователей и упорядочить их по полю в другой таблице, однако это поле не всегда существует?

Пользователи - содержит мета-данные пользователей - содержит метаданные, в частности "вес""Это то, что я пытаюсь упорядочить.

Более конкретным решением было бы автоматическое определение их веса по умолчанию, но есть ли способ, с помощью которого я могу это сделать?Текущий рабочий запрос:

SELECT * FROM users u, usermeta um 
WHERE u.ID = um.ID 
  AND u.name LIKE '%search_terms%';

Потеряна при заказе по частям, любая / вся помощь будет оценена!

Ответы [ 3 ]

5 голосов
/ 06 марта 2012

Если у вас есть ключевое соотношение между таблицами (u.ID = um.ID) и вы хотите перечислить всех пользователей, вы можете использовать что-то вроде этого для заказа по weight на usermeta.

The LEFT JOIN позволяет вам сохранить ВСЕХ пользователей независимо от их существования в usermeta:

SELECT *, IFNULL(um.weight,9999) as newweight
FROM users u
LEFT JOIN usermeta um on u.ID = um.ID
WHERE u.name LIKE '%search_terms%'
ORDER BY IFNULL(um.weight,9999);
1 голос
/ 06 марта 2012
SELECT * 
FROM users u, usermeta um 
WHERE u.ID = um.ID AND                                                                                                                                                                                                                       
      u.name LIKE '%search_terms%'
ORDER BY  
      CASE WHEN um.weight IS NULL THEN 9999 ELSE um.weight END;

Вы можете использовать оператор case, чтобы отреагировать на отсутствующий weight, заменив его чем-то другим, если он отсутствует.

1 голос
/ 06 марта 2012

Вы можете использовать IFNULL MySQL для определения значения по умолчанию для веса

См .: http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_ifnull

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...