php - 使用 REGEXP 选择类别类似于多个类别 ID 的帖子

标签 php mysql pdo regexp-like

我有一串类别 ID,类似于 1;2;3;4;

现在我想获取 posts 表的 category 列中包含每个变量的所有帖子。

category 列还包含类似 1;2;3; 的内容,具体取决于帖子附加的类别。

如何设置 PDO 查询来检查是否在帖子表的 category 列中找到主字符串中的任何值?

我正在寻找看起来像category LIKE = IN (2;3;4;)的东西,它也必须与双/三...数字一起使用,如下所示:2;44;23;.

示例:

  • 帖子 1:1;2;
  • 帖子 2:3;
  • 帖子 3:1;

我使用字符串 1; 从 post 表中获取,我想要返回的结果是 Post 1Post 3 因为它们都包含 1;

最佳答案

最好的选择是将表重构为 posts 表(不带类别列表字段)和 posts_categories 表(带 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 也只是略知一二。

编辑:调整查询以仅显示帖子中的数据,并且每个帖子仅显示一次。

<小时/>

如果您还想要类别列表......

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未分组的结果。

编辑:修复了第二个查询示例中的拼写错误、不正确的别名。

关于php - 使用 REGEXP 选择类别类似于多个类别 ID 的帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37398317/

相关文章:

MySQL IF 语句查询问题

php - 使用 PDO 和 session 从数据库中选择数据

php - 检查 echo 内的单选按钮

php - 多选查询数据库

Mysql 和 LDML(附加字符与 latin1 相同)

MySQL无法在FROM子句中指定更新目标表

php - 共享主机上未加载 PDO 扩展

php - MYSQL PDO : Multiples users with the same rank. 如何制作数据库结构?

php - 传入生产服务器的 `/t.php` GET 请求是什么?

php - "DateTime->modify(' +0 天 ')"修改 DateTime 对象