如何将GROUP_CONCAT与MATCH一起使用,但仍显示GROUP_CONCAT中的所有项目?

时间:2013-02-07 19:59:38

标签: mysql

我目前正在开发一个MySQL查询,它从我的数据库中的三个表中提取信息:category category_industryindustry。它们基于ID相关,如下:

category            category_industry        industry
------------------  ------------------       ------------------
ID | Title          c_id | i_id              ID | Title
 1 | Fab Floor         1 |    1               1 | Beef
                       1 |    2               2 | Pork

category_industry表按类别ID和行业列出了某个类别所属的行业。我正在做的是获取每个行业的ID,并从industry表中提取该行业的标题。我使用GROUP_CONCAT语句将标题放在一起。如果不在查询中进行搜索,这就是结果应该如何,看起来如何:

Fabrication Floor
(Beef, Pork)

但是,如果我进行搜索,并且其中一个标题在搜索中匹配,它将只显示该标题,而不是所有标题。如果我正在搜索“牛肉”,这是我的查询:

SELECT *,
    GROUP_CONCAT(i.industry_title ORDER BY i.industry_title ASC SEPARATOR ', ') AS industries,
    MATCH (c.category_title, c.category_details) AGAINST ('Beef*' IN BOOLEAN MODE) AS cscore,
    MATCH (i.industry_title) AGAINST ('Beef*' IN BOOLEAN MODE) AS iscore,
    c.category_id AS cat_id
FROM category c
LEFT JOIN category_industry t  ON t.category_id = c.category_id
LEFT JOIN industry i ON i.industry_id = t.industry_id
WHERE
    MATCH (c.category_title, c.category_details) AGAINST ('Beef*' IN BOOLEAN MODE)
    OR MATCH (i.industry_title) AGAINST ('Beef*' IN BOOLEAN MODE)
    GROUP BY c.category_id
    ORDER BY (cscore + iscore) DESC, c.added_date ASC

此查询提供以下结果:

Fabrication Floor
(Beef)

它将显示Beef行业中的所有类别,但会从列表中删除所有其他行业。我希望它能展示其他行业。

有谁知道我的问题的解决方案?我试过用不同的方式重写我的语句,但似乎无法使列表保持完整。提前谢谢。

0 个答案:

没有答案