我目前正在处理一个 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
行业中的所有类别,但会从列表中删除所有其他行业。我希望它仍能展示其他行业。
有谁知道我的问题的解决方案?我尝试过很多不同的方式重写我的陈述,但似乎无法让列表保持完整。先感谢您。