使用 REGEXP 选择类别类似于多个类别 ID 的帖子
Selecting posts where category is like multiple category IDs using REGEXP
我有一串 category IDs
,看起来像这样 1;2;3;4;
。
现在我想在 posts
table.
的 category
列中获取所有包含这些变量的所有 post
category
列也有这样的内容 1;2;3;
取决于附加到 post 的类别。
我如何设置一个 PDO query
来检查是否在 post table 的 category
列中找到了主字符串中的任何值?
我正在寻找看起来像 category LIKE = IN (2;3;4;)
的东西,它还必须与 double/triple 一起使用......像这样的数字:2;44;23;
.
示例:
- Post 1:1;2;
- Post 2:3;
- Post 3:1;
我使用字符串 1;
从 post table 中获取,我想要返回的结果是 Post 1
和 Post 3
因为它们都是包含 1;
.
最好的选择是将 table 重构为 posts
table(没有类别列表字段),posts_categories
table(有 post_id,和 category_id 个字段)。
然后使用像这样的简单查询:
SELECT DISTINCT p.*
FROM posts_categories AS pc
INNER JOIN posts AS p ON pc.post_id = p.post_id
WHERE pc.category_id IN ([your list of values])
;
遗憾的是,大多数数据库库不支持任意参数列表,因此您可能需要在代码中生成确切的 ?,?,?,...
系列;但我不熟悉 pdo 并且只略微了解 php.
编辑:调整查询以仅显示来自 post 秒的数据,并且每个 post.
仅显示一次
如果您也想要类别列表....
SELECT DISTINCT p.*
, GROUP_CONCAT(assoc_pc.category_id SEPARATOR ';') AS catList
FROM posts_categories AS filtering_pc
INNER JOIN posts AS p ON filtering_pc.post_id = p.post_id
INNER JOIN posts_categories AS assoc_pc ON p.post_id = assoc_pc.post_id
WHERE filtering_pc.category_id IN ([your list of values])
GROUP BY p.post_id
;
GROUP_CONCAT
是 MySQL 特定的;如果你想要更多的平台独立性,你可能想要 SELECT p.*, assoc_pc.caetgory_id
而只是 ORDER BY p.post_id
并在处理未分组的结果时在代码中构建 catList。
编辑:修复了第二个查询示例中的拼写错误、不正确的别名。
我有一串 category IDs
,看起来像这样 1;2;3;4;
。
现在我想在 posts
table.
category
列中获取所有包含这些变量的所有 post
category
列也有这样的内容 1;2;3;
取决于附加到 post 的类别。
我如何设置一个 PDO query
来检查是否在 post table 的 category
列中找到了主字符串中的任何值?
我正在寻找看起来像 category LIKE = IN (2;3;4;)
的东西,它还必须与 double/triple 一起使用......像这样的数字:2;44;23;
.
示例:
- Post 1:1;2;
- Post 2:3;
- Post 3:1;
我使用字符串 1;
从 post table 中获取,我想要返回的结果是 Post 1
和 Post 3
因为它们都是包含 1;
.
最好的选择是将 table 重构为 posts
table(没有类别列表字段),posts_categories
table(有 post_id,和 category_id 个字段)。
然后使用像这样的简单查询:
SELECT DISTINCT p.*
FROM posts_categories AS pc
INNER JOIN posts AS p ON pc.post_id = p.post_id
WHERE pc.category_id IN ([your list of values])
;
遗憾的是,大多数数据库库不支持任意参数列表,因此您可能需要在代码中生成确切的 ?,?,?,...
系列;但我不熟悉 pdo 并且只略微了解 php.
编辑:调整查询以仅显示来自 post 秒的数据,并且每个 post.
仅显示一次如果您也想要类别列表....
SELECT DISTINCT p.*
, GROUP_CONCAT(assoc_pc.category_id SEPARATOR ';') AS catList
FROM posts_categories AS filtering_pc
INNER JOIN posts AS p ON filtering_pc.post_id = p.post_id
INNER JOIN posts_categories AS assoc_pc ON p.post_id = assoc_pc.post_id
WHERE filtering_pc.category_id IN ([your list of values])
GROUP BY p.post_id
;
GROUP_CONCAT
是 MySQL 特定的;如果你想要更多的平台独立性,你可能想要 SELECT p.*, assoc_pc.caetgory_id
而只是 ORDER BY p.post_id
并在处理未分组的结果时在代码中构建 catList。
编辑:修复了第二个查询示例中的拼写错误、不正确的别名。