2017-02-14 1 views
0

requête Mysql dans la configuration sphynx:résultats correspondants mal à 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 

Interrogation donne une telle structure (laissez-moi appeler ce résultat 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 mode match est SPH_MATCH_ANY. ennuis commencent quand je suis en train de faire Query('dress'), il en résulte

178 dress Liu Jo Jeans 
190 dress Moda Corazon 

Mais je dois tous les résultats où name ou champ vendor contient « robe » (attendu résultat Une sans bottes).

Qu'est-ce que je fais mal? Merci d'avance!

MISE À JOUR pour la structure Danilo Bustos
catégories: id (integer,auto increment), name (varchar,255), parent_id (integer).
vêtements structure: id (integer,auto increment), name (varchar,255), vendor (varchar,255)

Attendons résultat:

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

Pouvez-vous copier la structure des tables et définir un exemple du résultat attendu? –

+1

Main post mise à jour – 966p

Répondre

1

L'un de vos principaux problèmes est 'document-id' dans sphynx doit être unique. Vous semblez être utiliser category_id. Pourtant, il y a plusieurs lignes dans votre résultat A avec le même identifiant. Cela conduit à des résultats imprévisibles dans Sphinx.

En général, il semble que vous devriez utiliser l'identifiant des vêtements comme identifiant de document. Donc, peut obtenir plusieurs lignes, car il devrait être unique. Vous pouvez placer category_id dans un attribut sphinx, si vous voulez toujours que le resultset le contienne. (Peut-être devrez-vous modifier votre requête interne pour obtenir l'ID dans la table de jointure, utilisez GROUP BY plutôt que DISTINCT pour dédupliquer), même si vous n'en avez peut-être même pas besoin.

+0

Grande réponse, problème de sujet résolu, merci! – 966p