2016-10-13 2 views
0

Ich möchte eine FULLTEXT-Suche ausführen und nur Ergebnisse mit einem eindeutigen (eindeutigen) Produktname zurückgeben, aber die scheint nicht zutreffen. Irgendwelche Hilfe oder Hinweise in die richtige Richtung würden sehr erhalten werden.MySQL FULLTEXT Übereinstimmung mit eindeutigen Ergebnissen

MySQL QUERY:

SELECT DISTINCT(product_name), sku 
FROM products 
WHERE MATCH(product_name) 
AGAINST('Flixonase' IN NATURAL LANGUAGE MODE) 
LIMIT 5 

Aktuelles Ergebnis:

product_name      sku 
FLIXONASE NASAL 24 HR SPRAY 60D 9300673808851 
FLIXONASE NASAL 24 HR SPRAY 120D 9400600822438 
FLIXONASE NASAL 24 HR SPRAY 60D 930067308851 
FLIXONASE NASAL 24 HR SPRAY 60D 9300673831972 
FLIXONASE NASAL 24 HR SPRAY 120D 9300673832146 

Hinweis: Zeilen 1, 3 & 4 haben doppelte product_names. Das versuche ich zu beseitigen.

Ergebnis bin ich wollte

product_name      sku 
FLIXONASE NASAL 24 HR SPRAY 60D 9300673808851 
FLIXONASE NASAL 24 HR SPRAY 80D 9400600822438 
FLIXONASE NASAL 24 HR SPRAY 100D 930067308851 
FLIXONASE NASAL 24 HR SPRAY 120D 9300673831972 
FLIXONASE NASAL 24 HR SPRAY 140D 9300673832146 

Antwort

0

DISTINCT gilt nicht für eine einzelne Spalte verweist sie auf die ganze Reihe. Wenn Sie eine einzelne Zeile für eine bestimmte Spalte abrufen möchten, verwenden Sie GROUP BY.

SELECT product_name, sku 
FROM products 
WHERE MATCH(product_name) 
    AGAINST('Flixonase 24hr Allergy Relief Nasal Spray 60 Doses' IN NATURAL LANGUAGE MODE) 
GROUP BY product_name 
ORDER BY MATCH(product_name) 
    AGAINST('Flixonase 24hr Allergy Relief Nasal Spray 60 Doses' IN NATURAL LANGUAGE MODE) DESC 
LIMIT 5 
+0

Hmm, Hinzufügen der 'GROUP BY product_name' jetzt nicht gibt mir mehr die fünf besten Matches, sondern fünf von' product_name' aufsteigend sortiert Ergebnisse? – JasonMortonNZ

+0

Sie haben nicht 'ORDER BY' in der Abfrage, warum erwarten Sie, dass das Ergebnis in einer bestimmten Reihenfolge ist? – Barmar

+0

Ich habe 'ORDER BY' hinzugefügt, um sie zu sortieren, wie gut das Match ist. – Barmar

0

Gleiches Problem hier. Jetzt lösen Sie mit GROUP BY.
Mein Code:
SELECT * FROM products WHERE MATCH(description) AGAINST('my product description' IN NATURAL LANGUAGE MODE) GROUP BY product_name LIMIT 10

dank @Barmar

Verwandte Themen