【问题标题】:Get data from 3 tables by one query一次查询获取3张表的数据
【发布时间】:2019-10-14 13:37:15
【问题描述】:

我有一个小博客项目 我有 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

第二个想法是从帖子表中删除列作者,类别并创建第四个表并将其称为连接,它将相互引用ID(将所有内容连接在一起) 但是我什至不知道我是否可以做mysql查询

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您可以在一个 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 是您的数据库看起来如何标准化的一个示例。

    【讨论】:

    • 关于如何使用多个类别/作者的任何建议?我正在考虑创建第四个表来特定关系,例如 post_id | category_id
    • @user3356619 你需要两个额外的表,posts_writers 和 posts_categories。见db-fiddle.com/f/67sGFv3xcERojvypmjdF8/1
    猜你喜欢
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 2016-09-25
    • 2021-02-07
    • 1970-01-01
    • 2011-07-01
    相关资源
    最近更新 更多