2017-02-14 69 views
0

MySQL查询:错配的结果与斯芬克斯狮身人面像的配置

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 

查询给出了这样的结构(让我叫这个结果的):

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

狮身人面像匹配模式是SPH_MATCH_ANY。 故障开始时,我试图让Query('dress'),这导致

178 dress Liu Jo Jeans 
190 dress Moda Corazon 

但我需要在那里namevendor字段包含“礼服”的所有结果(预期结果的没有靴子)。

我在做什么错?提前致谢!

UPDATE达尼罗Bustos的
类别结构:id (integer,auto increment), name (varchar,255), parent_id (integer)
衣服结构:id (integer,auto increment), name (varchar,255), vendor (varchar,255)

期待的结果:

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

你可以复制表格的结构并定义预期结果的例子吗? –

+1

已更新主帖子 – 966p

回答

1

你的一个主要问题是在狮身人面像 '文件ID' 应该是唯一的。你似乎使用category_id。但是,您的结果A中有多个行具有相同的ID。这导致狮身人面像不可预测的结果。

一般来说,你应该使用从衣服的ID作为文件ID。所以可以获得多行,因为它应该是唯一的。如果仍然希望结果集包含它,可以将category_id放在sphinx属性中。

(也许将不得不改变你的'内部'查询来获得连接表中的id,使用GROUP BY而不是DISTINCT去重复。虽然可能甚至不需要它,只是两个表之间的标准连接可能会)

+0

很好的回答,解决了话题问题,谢谢! – 966p