Отображать записи, у которых есть совпадение в запросе на присоединение первым - PullRequest
0 голосов
/ 23 августа 2011

Чтобы упростить задачу для вопроса, у меня есть таблица листингов и таблица lists_featured .Основные списки таблицы содержат основные данные для всех списков, но таблица lists_featured содержит данные только для тех списков, которые представлены.они представлены или не являются первыми, то есть строки, которые совпадают при выполнении LEFT или RIGHT JOIN, должны стоять первыми.Как бы я поступил так с одним запросом, а не с двумя?

EDIT

Кроме того, возможно ли добавить условие WHERE к запросуотносится только к присоединенным записям?Например, из избранных списков я хочу только те, которые имеют условие WHERE featured_end_date > now() - это должно относиться только к объединенным записям.Это связано с тем, что срок действия листинга будет отличаться от фактической даты истечения срока листинга.

Ответы [ 2 ]

1 голос
/ 23 августа 2011
SELECT l.*
FROM listings l
    LEFT JOIN listings_featured lf ON lf.lid = l.lid
WHERE lf.lid IS NULL OR lf.featured_end_date > now()
ORDER BY lf.lid IS NULL

lf.lid IS NULL - это FALSE для всех избранных списков, поэтому при сортировке они помещаются перед другими списками.

EDIT

Добавлено условие ГДЕ

0 голосов
/ 23 августа 2011

Самый простой способ - использовать ORDER BY, используя один из столбцов, доступных только в таблице Listings_featured. Нули должны идти в конец списка.

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