我目前正在开发一个MySQL查询,它从我的数据库中的三个表中提取信息:category
category_industry
和industry
。它们基于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
行业中的所有类别,但会从列表中删除所有其他行业。我希望它能展示其他行业。
有谁知道我的问题的解决方案?我试过用不同的方式重写我的语句,但似乎无法使列表保持完整。提前谢谢。