2017-02-14 5 views
0

Mysql Abfrage in Sphinx config:Wrong passenden Ergebnisse mit Sphinx

SELECT 
    c.id, 
    c.name, 
    p.vendor 
FROM 
    categories AS c 
LEFT JOIN (
    SELECT DISTINCT 
     vendor, 
     category_id 
    FROM 
     clothes 
) p ON c.id = p.category_id 
ORDER BY 
    c.name 

Abfrage einer solchen Struktur gibt (lassen Sie mich nennen das Ergebnis A):

id name vendor 
178 dress Liu Jo Jeans 
178 dress Bergamoda 
178 dress Rifle 
190 dress Moda Corazon 
190 dress Bergamoda 
205 boots Bergamoda 

Sphinx Spiel-Modus SPH_MATCH_ANY ist. Troubles beginnen, wenn ich versuche, Query('dress') zu machen, führt dies

178 dress Liu Jo Jeans 
190 dress Moda Corazon 

Aber ich brauche alle Ergebnisse, wo name oder vendor Feld ‚Kleid‘ enthält (erwartete Ergebnis A ohne Schuhe).

Was mache ich falsch? Danke im Voraus!

UPDATE für Danilo Bustos
Struktur Kategorien: id (integer,auto increment), name (varchar,255), parent_id (integer).
Kleidung Struktur: id (integer,auto increment), name (varchar,255), vendor (varchar,255)

Erwartet Ergebnis:

id name vendor 
178 dress Liu Jo Jeans 
178 dress Bergamoda 
178 dress Rifle 
190 dress Moda Corazon 
190 dress Bergamoda 
+0

Können Sie die Struktur der Tabellen kopieren und ein Beispiel für das erwartete Ergebnis definieren? –

+1

Hauptbeitrag aktualisiert – 966p

Antwort

1

Einer Ihrer Hauptprobleme ist 'Dokument-ID' in sphinx eindeutig sein sollte. Sie scheinen category_id zu verwenden. Es gibt jedoch mehrere Zeilen in Ihrem Ergebnis A mit derselben ID. Dies führt bei Sphinx zu unvorhersehbaren Ergebnissen.

Im Allgemeinen scheint, dass Sie die ID von Kleidung als Dokument-ID verwenden sollten. So können mehrere Zeilen erhalten werden, da es eindeutig sein sollte. Sie können category_id in ein sphinx-Attribut einfügen, wenn das Resultset weiterhin enthalten soll.

(vielleicht müssen Sie Ihre 'innere' Abfrage ändern, um die ID in der Join-Tabelle zu erhalten, verwenden Sie GROUP BY statt DISTINCT, um deduplizieren. Obwohl vielleicht nicht einmal brauchen, nur ein Standard-Join zwischen zwei Tabellen)

+0

Große Antwort, gelöstes Thema Problem, danke! – 966p