MySQLデータベースでは、私は3つのテーブル:customers
,projects
およびtasks
を持っています。私が実装している検索では、3つのテーブルすべてを検索し、一致するものを選択したいと考えています。問題はMySQLが返す結果の量を等しく制限したいということです。MySQL - 合計LIMITでUNIONで等しい量をそれぞれ選択します
これは私が現在持っているクエリで例です。この例では
SELECT id, title, type
FROM (
(
SELECT id, title, 'customer' AS type, MATCH (title) AGAINST ('+test* ' IN BOOLEAN MODE) AS score
FROM customers
WHERE MATCH (title) AGAINST ('+test* ' IN BOOLEAN MODE)
)
UNION DISTINCT
(
SELECT id, title, 'project' AS type, MATCH (title) AGAINST ('+test* ' IN BOOLEAN MODE) AS score
FROM projects
WHERE MATCH (title) AGAINST ('+test* ' IN BOOLEAN MODE)
)
UNION DISTINCT
(
SELECT id, title, 'task' AS type, MATCH (title) AGAINST ('+test* ' IN BOOLEAN MODE) AS score
FROM tasks
WHERE MATCH (title) AGAINST ('+test* ' IN BOOLEAN MODE)
)
) res
LIMIT 6;
、私はこの例のための私の希望endresultは以下れる6
に結果を制限したいです。
1)すべてのテーブルに少なくとも2つの結果がある場合は、それぞれに2つの結果を表示します。
id title type
20 'First test customer' 'customer'
22 'Test customer 2' 'customer
48 'A project for testing' 'project'
17 'Test Project' 'project'
1 'Task test' 'task'
2 'Second test' 'task'
2)1つのテーブルに結果がない場合は、他の2つのテーブルごとに3つの結果を表示します。 (一つだけ表がその表6の結果を示し、その結果を持っている場合。)
id title type
20 'First test customer' 'customer'
22 'Test customer 2' 'customer
56 'Customer test 56' 'customer'
1 'Task test' 'task'
2 'Second test' 'task'
3 'Test task' 'task'
3)テーブルの2が2つの以上の結果を有し、第3のテーブルのみが1件の結果がある場合、いずれかの検索結果を表示十分な結果が得られたテーブルのうち、2つのうちの他方のテーブルについては2つの結果が得られ、1つの結果のみを有するテーブルについては1が得られる。
id title type
20 'First test customer' 'customer'
48 'A project for testing' 'project'
17 'Test Project' 'project'
34 'Testing project' 'project'
1 'Task test' 'task'
2 'Second test' 'task'
誰でもこの手伝いできますか?
ありがとうございます!
答えてくれてありがとうございますが、MySQLでは 'SET'(構文エラー)を使用できませんでした。何故かあなたはなぜ知っている? – DylanVB
@DylanVB私は答えを編集しました。おそらく、セット宣言文は選択外のものでなければなりません。 – kiks73
クエリの外にある変数を宣言するのは実際には機能します。クエリ内に変数を設定する方法はありますか? – DylanVB