【发布时间】:2021-08-12 21:51:19
【问题描述】:
我有一个名为 Records 的表格,用于显示产品。我还有一个名为 Categories 的表格,其中显示了每个单独产品的类别(如果存在的话)。
Categories 表的结构类似于:
id category_id
-- -----------
1 1
1 3
3 1
3 2
5 4
我为提取记录 ID 和类别 ID 而运行的查询是:
SELECT
Records.id,
(SELECT
GROUP_CONCAT(C.category_id)
FROM `Categories` C
WHERE Records.id = C.id) AS 'CategoryName'
FROM
Records
输出将返回:
id CategoryName
-- ------------
1 1,3
2 NULL
3 1,2
4 4
5 NULL
我的网站有一个区域,用户可以在其中按类别过滤记录。假设用户想要过滤类别 = 1 或 2。我想我只是添加 WHERE FIND_IN_SET(1,CategoryName) OR FIND_IN_SET(2,CategoryName) 但这不起作用,因为 MySQL execution order 和 CategoryName 列尚不存在。
过滤category_id 的最佳方法是什么?类别的输入将用逗号分隔,但我可以使用 PHP 到 explode() 字符串来分隔它们。
【问题讨论】: