0

テーブルがあり、特定の数のランダムなエントリを取得しようとしています。カテゴリの特定の最大数のエントリを一番上に置き、その後に別のカテゴリの特定の数を配置したいと考えています。

第 1 部門にエントリーがない場合は、第 2 部門のエントリー数にそのエントリー数が追加されます。

たとえば、私のテーブルには 3 つのカテゴリがあります (カテゴリ:「完全」、「部分的」、「空」)。全部で12個のエントリを表示したいです。

「完全」カテゴリについては、8 を表示したいと思います。次に、3 つのパーシャルを表示し、最後に 1 つの空を表示します。

完了が 8 つ未満の場合、たとえば 5 つある場合、完了が 5 つ、部分が 6 つ、空が 1 つ表示されます。(完全な 3 つが欠落しているため、基本パーシャル 3 つ + 余分な 3 つ = 6)。

それを行うためのクエリは何でしょうか?

これが私が実際に持っているクエリです:

SELECT *
FROM items
ORDER BY category='complete' DESC, category='partial' DESC, category DESC, RAND() ASC
LIMIT 12

上記のクエリの問題は、12 個のコンプリートを取得し、探しているものとは正確に一致しないことです。

4

1 に答える 1

0

USION DISTINCTステートメントを使用できます。

このようにしてみてください:

(SELECT * FROM items WHERE category = "complete" LIMIT 8)
UNION DISTINCT (SELECT * FROM items WHERE category = "partial" LIMIT 3)
UNION DISTINCT (SELECT * FROM items WHERE category = "" LIMIT 1)
于 2012-07-04T15:52:39.163 に答える