【问题标题】:get data from multiple tables in MySQL with different where conditions从 MySQL 中具有不同 where 条件的多个表中获取数据
【发布时间】:2021-10-09 16:42:33
【问题描述】:

我搜索了很多,但找不到解决方案。

问题

我有 3 张桌子。 课程进度课程 我就是这样加入的。

 SELECT c.course_id
    , l.topic
    , l.id
    , l.vid_duration
    , p.* 
 FROM courses c 
 LEFT 
 JOIN lessons l 
 ON l.course_id = c.course_id  
 LEFT 
 JOIN progress sp 
 ON l.id = p.lesson_id 
 WHERE c.slug = :course 
 and p.user_id = :userid

我想要所有表中的数据。

当两个 Where 条件都为真但不为假时,它工作正常。

所以,如果条件 p.user_id = :userid 为假,我想要数据表单 lessonsprogress 的空列。

希望你能理解我的问题。

【问题讨论】:

  • 如果意图是 `LEFT JOIN' 给定的表,那么该表的条件必须放在 JOIN 子句中,而不是 WHERE
  • @coyeb60297 WHERE 是一个额外的条件
  • @B001ᛦ 我不知道那是什么意思。
  • @user16577935 你能告诉我如何进入JOIN子句,而不是WHERE

标签: php mysql join


【解决方案1】:

您需要将用户检查放在join中,而不是在where条件中 像这样:

SELECT c.course_id,l.topic,l.id,l.vid_duration,p.* 
FROM courses c 
LEFT JOIN lessons l ON l.course_id=c.course_id  
LEFT JOIN progress p ON l.id = p.lesson_id and p.user_id = :userid
WHERE c.slug = :course 

这样做的原因是 JOINS 使用“左连接”(隐式为外连接)。这种类型的连接意味着如果条件有效,则返回该表的该行的所有列数据。如果整个条件不起作用,它将返回前面提到的表的所有数据,但对于行中提到的表,它将返回所有这些列的 NULLS。

对于这种描述,我深表歉意,因为很难在不冗长的情况下准确地说出复杂的外部(或左)联接是如何工作的。

【讨论】:

    猜你喜欢
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    相关资源
    最近更新 更多