php - 一次查询获取3张表的数据

标签 php mysql

我有一个小型博客项目 我有3张 table

Posts
PostID | TITLE | WRITERS(USERS) | CATEGORIES
1 | SOME TITLE | 1,2 | 1,2

USERS
USERID | USERNAME
1 | Alaa
2 | John

Categories
1 | Business
2 | Marketing

我正在尝试获取此输出

POST TITLE: SOME TITLE
Writers: Alaa And John
Categories: Business, And marketing

请注意,我说的是一个非常大的循环,一个页面上有 100 个帖子供许多观众使用
所以,目前我有两个想法
第一个想法

1- take value from writers ( 1,2 )
2- Explode it by php
3- use mysql query to bring the writers
4- Do the same thing for categories

第二个想法是从 posts 表中删除 writers、categories 列,并创建第四个表并将其称为“connections”,该表将相互引用 id(将所有内容连接在一起) 但我什至不知道我是否可以进行mysql查询

最佳答案

您可以在一个 MySQL 查询中获取所有这些值。

SELECT p.TITLE AS `Post Title`,
       GROUP_CONCAT(DISTINCT u.USERNAME) AS Writers,
       GROUP_CONCAT(DISTINCT c.CategoryName) AS Categories
FROM Posts p
JOIN Users u ON FIND_IN_SET(u.USERID, p.WRITERS)
JOIN Categories c ON FIND_IN_SET(c.Id, p.CATEGORIES)
GROUP BY p.TITLE

输出:

Post Title  Writers     Categories
SOME TITLE  Alaa,John   Business,Marketing

Demo on dbfiddle

注意:将值存储在逗号分隔的列表中(例如您的 WRITERSCATEGORIES 列)是一个坏主意,并且会使编写这种类型查询有问题(只有 MySQL 的 FIND_IN_SET 函数才使其完全可用),您应该考虑正确规范化数据(每行一个值)。 Here这是您的数据库如何看起来标准化的示例。

关于php - 一次查询获取3张表的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56352123/

相关文章:

php - 在 MySQL 中更新表

mysql - 调整 Regex 以与 MySQL 一起工作

php - 计算给定时间段内的空闲日期数量

php - 比较数据库中匹配值的两个表并写入/合并到新表

javascript - 解码 JavaScript 编码的内容

php - HTACCESS : Change domain root to sub-directory

javascript - 下拉可能不一样 MYSQL PHP

javascript - 无法将编辑的内容存储到数据库

PHP:如何处理 SQL 返回值?

mysql - 当 GROUP BY Id 和 DATE 时获取 COUNT 个 id