与Sphinx的匹配结果错误

时间:2017-02-14 20:41:57

标签: mysql sphinx

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

但我需要namevendor字段包含'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

1 个答案:

答案 0 :(得分:1)

你的主要问题之一是sphinx中的'document-id'应该是唯一的。你似乎使用category_id。但是,结果A中有多行具有相同的ID。这会导致Sphinx无法预测的结果。

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

(可能必须更改你的'内部'查询以获取连接表中的id,使用GROUP BY而不是DISTINCT进行重复数据删除。虽然可能甚至不需要它,但只需要两个表之间的标准JOIN)< / p>