2013-04-03 4 views
-1

У меня есть таблица «сделок» с столбцами «id», «name», «created_at» .... У меня есть сводная таблица «speciallisting_deal», которая поддерживает отношения между специальными списками и сделками. Его столбцы - «id», «deal_id», «speciallisting_id» ....Приоритет некоторых строк в mysql при заказе

В моем случае, speciallisting_id определенно, скажем 10. Получая результаты из таблицы «сделок» в соответствии с некоторыми критериями (например, ordering by created_at и т. Д.), Я хочу отдавать приоритет (я имею в виду, что хочу видеть их в верхней части результатов) к строкам в «сделках», которые его id в этом »(SELECT deal_id FROM speciallisting_deal WHERE speciallisting_id = 10)» или эквивалент.

Как я могу это сделать?

ответ

1

Вы можете использовать case заявление в order by:

order by (case when specialist_id = 10 then 0 else 1 end), 
     created_at desc 
0

простой левое соединение, скорее всего, хватит. На самом деле лучше предоставить то, что вы пытались сделать сами.

SELECT 

    d.id, 
    d.name, 
    d.created_at, 
    -- Find out if this is considered "special" 
    IF(sd.id IS NULL,0,1) AS isSpecial 

FROM deals d 

-- Left join the speciallistings onto this 
LEFT JOIN speciallisting_deal sd 
    ON sd.deal_id = d.id 
    -- You don't have to specify a specific ID if you just want to get all that are special 
    AND sd.speciallisting_id = 10 
    -- You could do multiple speciallisting_id's using IN 
    -- AND sd.speciallisting_id IN (8,2,10,314) 

ORDER BY 
    isSpecial DESC, 
    d.created_at DESC 
Смежные вопросы