【问题标题】:SQL query to return results from one table based on data joined from two other tables?SQL查询根据从其他两个表连接的数据从一个表返回结果?
【发布时间】:2015-09-13 09:17:04
【问题描述】:

我有一个提供吉他课程的网站 (drupal)。我有一个包含练习内容类型的内容类型课程。练习通过用于处理课程-练习关系的特定表引用课程 nid。练习有图像(称为选项卡),图像通过文件表处理。对于给定的课程,我正在尝试构建一个 SQL 查询,该查询返回与课程练习相关的图像,然后随机选择一个。我知道它相当于某种连接,但我不知道它是左连接、内连接还是某种组合。

相关表中的相关列是

  1. 用于将练习链接到课程(课程)的表格。 field_lesson_target_id 是课程 id,entity_id 是练习 id。

  2. 练习的图像字段(选项卡)。 entity_id 是练习 id,field_tab_fid 是文件 id。

  3. 文件表(file)fid是文件id,在这种情况下会与tab表中的field_tab_fid相关。

这是小提琴:

http://sqlfiddle.com/#!9/dbf63

【问题讨论】:

  • 你能在你的应用层随机挑选图片吗?这比在查询中要容易得多。
  • 是的,我可以稍后随机化结果
  • SELECT l.*, t.*, f.* 从课程中选择 l LEFT JOIN tab as t ON t.entity_id = l.entity_id LEFT JOIN file as f ON f.fid = t.field_tab_fid WHERE l.entity_id = '693' sqlfiddle.com/#!9/dbf63/3
  • 您的查询正在返回一个练习 ID 为 693 的练习的文件。在我的示例中,课程 ID 为 672,因此查询必须返回引用课程 672 的所有练习的所有图像。下面是我的 SQL似乎有效,但是当有各种课程、练习的数据时,我还没有测试过。

标签: mysql join


【解决方案1】:

看完this post,也许这就是我需要的?

SELECT * 
FROM file f
INNER JOIN tab t on t.field_tab_fid = f.fid
INNER JOIN lesson l ON l.entity_id = t.entity_id
WHERE l.field_lesson_target_id = 672

我只是不确定我的情况是否要求使用相同类型的连接。在示例中,有两个条件,但在我的情况下似乎有一个。

小提琴:http://sqlfiddle.com/#!9/dbf63/4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-15
    • 2011-09-30
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多