私はテーブルに数百レコードあり、それらの最後の50レコードを取得する必要がありますが、私は25人の男性と25人の女性が必要です。性別の列があります。私はちょうどそのクエリを作る方法を理解できません。助けてもらえますか?このクエリの書き方を理解できません
答えて
(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を持つレコードを追加しました。
脳全体。ありがとう。 –
'ORDER BY 'がなければ、要求された最後の50_を返さないことに注意してください。 –
十分に公正で、答えを完成させるためにそれらを加えました。 – hoppa
正確に50が必要な場合は、それぞれ最後の25個を取得するUNION
を使用します。これは、自動増分のid
列が降順でソートされており、各性別の最新の25個を取得していることを前提としています。
UNION
の個々のコンポーネントのORDER BY
とLIMIT
を使用するために、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'....)
、無保証。
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人の女性が得られ、結果がまとめられます。
ORDER BY
に使用できる別の列がない限り、LASTという概念はありません。
私は2つのクエリを書くことをお勧めします。男性のみ、女性のみです。
次に、最後のセットがあるように注文を使用します。
これを(DESC
を使用して)反転して、代わりにFIRSTにします。
LIMIT
句を使用して、必要な番号を選択します。
であり、最後にUNION
である。
あなたはあまりにもいいです... :) – Randy
最新の男性25人と最新の女性25人をつかむために2つのクエリを使用してみてください。次に、結果を連結します。
SELECT * FROM males LIMIT 25 ORDER BY DESC
SELECT * FROM females LIMIT 25 ORDER BY DESC
テーブル構造を指定してください。レコードをソートする方法は? – Devart