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 未満の場合は、すべての国に対して 2 番目のクエリを再実行しますが、制限 (100-myexistingnoofresults) があります。

最初のクエリのみを使用して何らかの方法で変更して、最初の x 結果が 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 に答える