通过一个查询从3个表中获取数据

时间:2019-05-29 02:01:11

标签: php mysql

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

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,category,并创建第四个表并将其称为connection,这将使id相互引用(将所有内容连接在一起) 但我什至不知道我是否可以执行mysql查询

1 个答案:

答案 0 :(得分:2)

您可以在一个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是如何规范化数据库的示例。