2013-10-05 25 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