我有一个小型博客项目 我有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
注意:将值存储在逗号分隔的列表中(例如您的 WRITERS
和 CATEGORIES
列)是一个坏主意,并且会使编写这种类型查询有问题(只有 MySQL 的 FIND_IN_SET
函数才使其完全可用),您应该考虑正确规范化数据(每行一个值)。 Here这是您的数据库如何看起来标准化的示例。
关于php - 一次查询获取3张表的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56352123/