In einer MySQL-Datenbank habe ich 3 Tabellen: customers
, projects
und tasks
. Für eine Suche, die ich implementiere, möchte ich alle 3 Tabellen durchsuchen und gefundene Übereinstimmungen auswählen. Das Problem ist, dass ich die Anzahl der von MySQL zurückgegebenen Ergebnisse gleichermaßen einschränken möchte.MySQL - SELECT gleiche Menge von jedem in UNION von insgesamt LIMIT
Dies ist ein Beispiel mit der Abfrage, die ich derzeit haben:
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;
In diesem Beispiel möchte ich die Ergebnisse begrenzen 6.
Meine gewünschte Endresultat für dieses Beispiel ist die folgende:
1) Wenn alle Tabellen mindestens 2 Ergebnisse haben, zeigen Sie jeweils 2 Ergebnisse an.
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) Wenn eine Tabelle keine Ergebnisse hat, zeigen 3 Ergebnisse für jede der zwei anderen Tabellen. (Wenn nur eine Tabelle, die Ergebnisse hat, zeigen 6 Ergebnisse für diese Tabelle.)
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) Wenn 2 der Tabellen haben mehr als 2 Ergebnisse, und die dritte Tabelle hat nur 1 Ergebnis, zeigen 3 Ergebnisse für eine der Tabellen mit genügend Ergebnissen, 2 Ergebnisse für das andere der beiden und 1 für die Tabelle mit nur 1 Ergebnis.
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'
Kann mir bitte jemand dabei helfen?
Vielen Dank im Voraus!
Danke für die Antwort, aber MySQL scheint mich nicht das 'SET' (Syntaxfehler) verwenden zu lassen. Hast du eine Chance, warum? – DylanVB
@DylanVB Ich habe die Antwort bearbeitet: wahrscheinlich sollte die Set-Deklaration-Anweisung außerhalb der Auswahl – kiks73
Deklarieren der Variablen außerhalb der Abfrage tatsächlich funktioniert. Wäre es möglich, die Variablen in der Abfrage festzulegen? – DylanVB