php - 在 mysql 或 sql server 中连接三个具有循环关系的表

标签 php mysql sql sql-server database

所以我一直在 NoSQL 数据库和关系数据库之间来回徘徊,但我无法解决一些在 NoSql 数据库中很容易解决的问题。这就是我现在正在努力解决的问题:

我们有一个文章表,其中包含文章信息,用户将向系统提交文章。每个用户可以提交多篇文章,但每篇文章仅由一个用户撰写,因此我们这里有一对多的关系。现在应该有一个用户最喜欢的文章的收藏夹列表,这意味着任何用户都可以有很多文章作为他/她最喜欢的文章,并且每篇文章都可以被许多用户收藏(如果这是一个动词)。因此,我们有一个多对多的关系,我们创建一个名为 favorites 的新表,其中 user_idarticle_id 作为列。以下是我当前对具有循环关系的表的设计的总结。

用户:

id | name
----------

文章:

id | title | text | user_id |  //here user_id is the writer of the article
-----------------------------

收藏夹:

id | user_id | article_id |  //here user_id the id of the user
---------------------------  //who favorited the article that article_id 
                             //that article_id points to

所以我现在要查询的是一个结果表,它将为我提供用户最喜欢的文章的有关文章本身的信息、其作者信息以及该最喜欢的项目所属的用户的信息。像这样的事情:

userName | favoriteArticleTitle | favoriteArticleText | favoriteArticleWriter
-----------------------------------------------------------------------------

因为第一列中的用户和最后一列中的用户来自同一个表,所以我无法想出一种方法来连接这三个表并获取 user.name 列而不导致含糊不清。

所以我的问题是如何才能达到我想要的结果(如果可能的话)?l

最佳答案

只需为 SELECT 中的列添加别名

SELECT [userName] = u.name
     , [favoriteArticleTitle] = a.title
     , [favoriteArticleText] = a.text
     , [favoriteArticleWriter] = au.name
  FROM users u
         INNER JOIN favorites f ON u.id = f.user_id
         INNER JOIN articles a ON f.article_id = a.user_id
         INNER JOIN users au ON a.user_id = au.id

关于php - 在 mysql 或 sql server 中连接三个具有循环关系的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47533536/

相关文章:

php - 修改 mod_mainmenu 以获取菜单项上的悬停文本

php - 使用相同查询的多个 PHP WHILE 循环

php - 下拉菜单不会横向

java - 如何将数据插入动态定义列的swing表(来自mysql数据库的数据)?

java - Hibernate 在 EntityVerifyVersionProcess 中抛出 NullPointerException

sql - MySQL 中的 NULL(性能和存储)

mysql - 需要从表中查询最大数量

php - 仅当 mysql 中不存在时才显示

php - 如何使用 MySQL 和 PHP 在数据库中存储用户之间的相关值?

java - JOOQ 中的提交钩子(Hook)