Als ein allgemeiner Fall von this question, weil ich denke, dass es für mehr Leute von Interesse sein könnte ... Was ist der beste Weg, um eine Volltextsuche auf zwei Tabellen durchzuführen? Angenommen, es gibt drei Tabellen, eine für Programme (mit übergabe-ID) und jeweils eine für Tags und Beschreibungen mit objekt-ID: Fremdschlüssel, die auf Datensätze in Programmen verweisen. Wir wollen die übergabe-ID von Programmen mit bestimmten Text in ihren Tags ODER Beschreibungen. Aus Gründen, auf die ich hier nicht eingehen werde, müssen wir MATCH GEGEN STELLEN. Lassen Sie sich nicht an diesem Aspekt hängen.MySQL FULLTEXT Suche Across> 1 Tabelle
programs
id
submitter_id
tags_programs
object_id
text
descriptions_programs
object_id
text
Folgende Arbeiten und führt in einem 20ms oder so:
SELECT p.submitter_id
FROM programs p
WHERE p.id IN
(SELECT t.object_id
FROM titles_programs t
WHERE MATCH (t.text) AGAINST ('china')
UNION ALL
SELECT d.object_id
FROM descriptions_programs d
WHERE MATCH (d.text) AGAINST ('china'))
aber ich versuchte, diese neu zu schreiben als ein JOIN wie folgt und es läuft für eine sehr lange Zeit. Ich muss es nach 60 Sekunden töten.
SELECT p.id
FROM descriptions_programs d, tags_programs t, programs p
WHERE (d.object_id=p.id AND MATCH (d.text) AGAINST ('china'))
OR (t.object_id=p.id AND MATCH (t.text) AGAINST ('china'))
Nur aus Neugier habe ich das OR mit UND ersetzt. Das läuft auch in wenigen Millisekunden, aber das brauche ich nicht. Was ist falsch mit der obigen zweiten Abfrage? Ich kann mit der UNION und Subselects leben, aber ich würde es gerne verstehen.
Ist die Syntax für das andere als das erste Beispiel? –
Ich folge nicht, Markus. (a) Wie würdest du schreiben "mach dich nach den Filtern?" und (b) "Sie verlieren die Nutzung Ihres Volltextindexes. ??? –