2013-10-05 53 views
0

請考慮以下查詢:修改選擇加入使用一個查詢,而不是兩個

SELECT item.*, address_book.Country 
FROM item 
INNER JOIN address_book 
ON item.addressbook_id=address_book.idaddress_book and address_book.Country="USA" order by rand() limit 100; ; 

我會後,通常做的是如果我沒有得到任何結果運行不會對任何國家的限制,另一個查詢(這樣我才能得到所有的國家)。

如果我得到的結果,但它們小於100我然後重新運行第二查詢所有的國家,但有限制(100 myexistingnoofresults)

有沒有辦法只使用第一查詢和修改不知怎的,所以第一個x的結果是美國(每個例子)和其餘的任何東西,如果沒有「美國」的結果存在顯示其他任何東西。

此外,如果可能,我想隨機顯示結果。

回答

2

您可以稍微棘手的方式使用order by來實現此目的。我想你也可以使用Rand()來隨機訂購,但這不是我嘗試過的。

Select 
    item.*, 
    address_book.Country 
From 
    item 
     Inner Join 
    address_book 
     on item.addressbook_id = address_book.idaddress_book 
Order By 
    Case When address_book.Country = "USA" Then 0 Else 1 End, 
    Rand() 
limit 100; 
+0

非常聰明所以當國家是美國這是一個0否則它是一個1那麼它只是命令結果的情況下,所以0秒第一對不對?每次都可以隨機排列第一組結果(美國)嗎? – Athanatos

+0

@Athanatos我添加了一些可能隨機訂購的東西。 – Laurence

+0

謝謝優秀的回答! – Athanatos