2012-03-06 2 views
2

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

Пользователи - Удерживает пользователей Пользователь Meta - содержит метаданные, в частности «вес», которые я пытаюсь заказать.

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

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

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

+2

вы можете использовать это: 'упорядочить по IFNULL (um.weight, 0)' –

ответ

3

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

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
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; 

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

Смежные вопросы