【问题标题】:Two table SQL double join?两表SQL双连接?
【发布时间】:2015-05-18 13:46:26
【问题描述】:

我有两张桌子,sectionsarticles。最初它是一对多的关系,因此articles 有一个sectionID 列。然后有一天决定让每篇文章属于两个部分。我选择不处理重构数据,而不是制作另一个“articles-in-section”表,而是在articles 表中添加了一个additionalSectionID 列。现在我有一个问题。

我想显示与给定部分相关的所有文章,无论是作为主要部分还是次要部分。本质上,我正在寻找两个表之间的某种双重联接。

这两个问题对同一问题有答案 - 1,2,但使用不同的数据库服务器。有没有办法在 PHP/MySQL 中做到这一点?

表格的结构基本上是这样的:

-- SECTIONS:
id   title   description   moderatorID   url

-- ARTICLES: 
id   title   shortDesc     fullText      photo   sectionID   additionalSectionID

【问题讨论】:

  • 听起来是完成重构的好时机。
  • 我和你在一起,谁会为它贴上$? :)
  • 这可能通过简单的UNION 就可以实现。请发布两个表中的示例,以及您期望查询输出的示例。
  • @jegesh 为什么你认为构建一个合适的多对多连接表比实现一个性能可能很差的查询要花费更多的时间?无论哪种情况,您都需要更改应用程序中的查询,并且创建新表大约需要 10 分钟。
  • @MikeBrant 问题是该网站最初是(不是由我编写的)没有框架,使用 spaghetti。以这种方式更改数据库结构将意味着在代码中查找 10 多个位置并更改每个位置,每次都可能出现拼写错误或其他错误。网站所有者已承诺对糟糕的代码进行大规模重构/大修,但在那之前......

标签: php mysql sql join


【解决方案1】:

见下文。

SELECT s.*, a.*
FROM sections s
LEFT JOIN articles a
ON s.id = a.sectionID
OR s.id = a.additionalSectionID
WHERE s.title = 'My Section';

【讨论】:

  • 这是 MySQL 的有效语法吗?我从未见过ORON 条件。
【解决方案2】:

您可以尝试在不同的表别名上进行两个内连接,如下所示:

SELECT 
*,
s1.section_name AS sectionA, 
s2.section_name AS sectionB
FROM articles    
    INNER JOIN sections s1 ON articles.sectionID = s1.sectionID
    INNER JOIN sections s2 ON articles.additionalSectionID = s2.sectionID

【讨论】:

  • 我会在接下来的几天里试试这个并告诉你
猜你喜欢
  • 2017-07-27
  • 2012-02-28
  • 2012-05-01
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-23
相关资源
最近更新 更多