2012-04-02 23 views
0

私はテーブルに数百レコードあり、それらの最後の50レコードを取得する必要がありますが、私は25人の男性と25人の女性が必要です。性別の列があります。私はちょうどそのクエリを作る方法を理解できません。助けてもらえますか?このクエリの書き方を理解できません

+1

テーブル構造を指定してください。レコードをソートする方法は? – Devart

答えて

5
(SELECT * FROM table WHERE gender = 'M' ORDER BY id DESC LIMIT 25) 
UNION 
(SELECT * FROM table WHERE gender = 'F' ORDER BY id DESC LIMIT 25) 

それは私が推測するでしょう。 IDによる注文の場合、私はあなたがオートインクリメントID列を持っていると仮定しました。最後にが最も高いIDを持つレコードを追加しました。

+0

脳全体。ありがとう。 –

+0

'ORDER BY 'がなければ、要求された最後の50_を返さないことに注意してください。 –

+0

十分に公正で、答えを完成させるためにそれらを加えました。 – hoppa

6

正確に50が必要な場合は、それぞれ最後の25個を取得するUNIONを使用します。これは、自動増分のid列が降順でソートされており、各性別の最新の25個を取得していることを前提としています。

UNIONの個々のコンポーネントのORDER BYLIMITを使用するために、MySQLはこれらのコンポーネントが()で囲まれることを期待。

(SELECT * FROM tbl WHERE gender='F' ORDER BY id DESC LIMIT 25) 
UNION ALL 
(SELECT * FROM tbl WHERE gender='M' ORDER BY id DESC LIMIT 25) 

:ところで、私は簡潔にするため、ここでSELECT *を使用しましたが、あなたはが実際にUNIONクエリ内のことを決してしない必要があります。代わりに、必要な列を明示的にリストし、UNIONの両方の部分で同じ順序になっていることを確認してください。

のように:私はちょうどすぐにこの考え

(SELECT col1, col2, coln FROM tbl WHERE gender='F'....) 
UNION ALL 
(SELECT col1, col2, coln FROM tbl WHERE gender='M'....) 
2

、無保証。

SELECT * FROM table WHERE gender = 'male' ORDER BY ID DESC LIMIT 25 
UNION ALL 
SELECT * FROM table WHERE gender = 'female' ORDER BY ID DESC LIMIT 25 

基本的に、最後の25人の男性と最後の25人の女性が得られ、結果がまとめられます。

1

ORDER BYに使用できる別の列がない限り、LASTという概念はありません。

私は2つのクエリを書くことをお勧めします。男性のみ、女性のみです。

次に、最後のセットがあるように注文を使用します。

これを(DESCを使用して)反転して、代わりにFIRSTにします。

LIMIT句を使用して、必要な番号を選択します。

であり、最後にUNIONである。

+1

あなたはあまりにもいいです... :) – Randy

1

最新の男性25人と最新の女性25人をつかむために2つのクエリを使用してみてください。次に、結果を連結します。

SELECT * FROM males LIMIT 25 ORDER BY DESC 

SELECT * FROM females LIMIT 25 ORDER BY DESC