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 结果为 USA(根据示例),其余为 USA,如果不存在“USA”的结果以显示其他任何内容。

另外,如果可能的话,我想随机显示结果。

4

1 回答 1

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;
于 2013-10-05T19:14:03.327 回答