2013-04-03 65 views
-1

我有一個包含「id」,「name」,「created_at」...列的「交易」表。 我有一個「speciallisting_deal」數據透視表,它保持特殊列表和交易之間的關係。它的列是「id」,「deal_id」,「speciallisting_id」...。在訂購時優先考慮mysql中的一些行

在我的情況下,speciallisting_id是肯定的,比如說10.當根據某些條件(如通過created_at排序等)從「deals」表獲得結果時,我想給予優先級(我的意思是我想看到他們在結果的頂部)交給「交易」中的行,該交易的ID在此「(SELECT deal_id FROM speciallisting_deal WHERE speciallisting_id = 10)」或等價物。

我該怎麼做?

回答

1

可以在order by使用case聲明:

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