Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过一次查询从3个表中获取数据_Php_Mysql - Fatal编程技术网

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

Php 通过一次查询从3个表中获取数据,php,mysql,Php,Mysql,我有一个小博客项目 我有三张桌子 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: Bus

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

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表中删除列writer和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


注意:将值存储在逗号分隔的列表中(例如,您的
编写者
类别
列)是一个坏主意,这使得编写此类查询成了问题(这是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


注意:将值存储在逗号分隔的列表中(例如,您的
编写者
类别
列)是一个坏主意,这使得编写此类查询成了问题(这是MySQL的唯一功能,使其完全可行),您应该考虑正确地规范化数据(每行一个值)。是您的数据库看起来如何正常化的一个示例。

关于如何使用多个类别/作者,有什么建议吗?我正在考虑创建第四个表来具体说明这些关系,比如这个post_id|category_id@user3356619您将需要两个额外的表,posts\u writers和posts\u categories。查看有关如何使用多个类别/作者的任何建议?我正在考虑创建第四个表来具体说明这些关系,比如这个post_id|category_id@user3356619您将需要两个额外的表,posts\u writers和posts\u categories。看见