sphinx配置中的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
查询提供了这样的结构(让我称之为结果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匹配模式为SPH_MATCH_ANY。
当我试图制作Query('dress')
时,麻烦就开始了,结果
178 dress Liu Jo Jeans
190 dress Moda Corazon
但我需要name
或vendor
字段包含'dress'的所有结果(预期结果A 没有引导)。
我做错了什么?提前谢谢!
Danilo 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)
你的主要问题之一是sphinx中的'document-id'应该是唯一的。你似乎使用category_id。但是,结果A中有多行具有相同的ID。这会导致Sphinx无法预测的结果。
一般来说,你应该使用衣服中的id作为document-id。因此它可以获得多行,因为它应该是唯一的。如果仍希望结果集包含它,可以将category_id放在sphinx属性中。
(可能必须更改你的'内部'查询以获取连接表中的id,使用GROUP BY而不是DISTINCT进行重复数据删除。虽然可能甚至不需要它,但只需要两个表之间的标准JOIN)< / p>