2017-11-22 5 views
0

Ich habe eine interne DB/Search Engine für Kunstmotive erstellt. Ich versuche, ein Suchkriterium zu erstellen, in dem Sie eine Spalte in der Datenbank abfragen und auch mehrere Spalten in der Datenbank nach einer Phrasensuche durchsuchen können, die FullText Search verwendet. Das Beispiel einer Suchanfrage könnte lauten: November {und} Black Friday. November sucht nach Creatives, die der Spalte "created_for" entsprechen, und "black friday" sucht in den Spalten headline, subheadline und additional_text nach einer Volltextsuche. Irgendwelche Ideen, wie dies zu erreichen wäre, wäre wirklich hilfreich!Können Sie eine einfache MYSQL-Anweisung mit einer FullText-Anweisung kombinieren

SELECT 
    (SELECT * FROM headlines WHERE created_for = '$searchString' AND image_slug <> '') 
    (SELECT *, MATCH(headline) AGAINST('$fullText' IN BOOLEAN MODE) AS MultiScore, MATCH(subheadline, additional_text) AGAINST('$fullText' IN BOOLEAN MODE) AS MultiSecondScore 
    FROM `headlines` 
    WHERE MATCH(headline, subheadline, additional_text) AGAINST('$fullText' IN BOOLEAN MODE)) 

Ich habe versucht, eine UNION-Anweisung vor der zweiten Select-Anweisung hinzufügen, aber ich erhalte eine Fehlermeldung, sagt die Spalten nicht übereinstimmen. Nicht sicher, woran ich hier falsch liege, aber danke im Voraus für deine Hilfe!

+0

Sie können '(SELECT * ...)' 'nicht als Ausdruck verwenden, ein Ausdruck kann nur eine einzelne Zeile mit einer einzigen Spalte zurückgeben. – Barmar

Antwort

2

Verwenden Sie AND in der WHERE Klausel.

SELECT *, MATCH(headline) AGAINST('$fullText' IN BOOLEAN MODE) AS MultiScore, MATCH(subheadline, additional_text) AGAINST('$fullText' IN BOOLEAN MODE) AS MultiSecondScore 
FROM headlines 
WHERE created_for = '$searchString' 
AND image_slug <> '' 
AND MATCH(headline, subheadline, additional_text) AGAINST('$fullText' IN BOOLEAN MODE) 

UNION bekommen würde Ergebnisse, die entweder von den Kriterien, nicht beide übereinstimmen. Und wenn Sie UNION verwenden, müssen beide Unterabfragen die gleiche Anzahl von Spalten zurückgeben - Sie müssten der ersten Abfrage zusätzliche Spalten hinzufügen, um den Spalten MultiScore und MultiSecondScore der ersten Abfrage zu entsprechen.

Verwandte Themen