【问题标题】:Difficulty in getting data from 4 tables难以从 4 个表中获取数据
【发布时间】:2013-04-20 06:43:53
【问题描述】:

我的数据库中有四个表 - 一个名为 kursplan,第二个表是 kursplan_kurse,第三个表是 kursplan_kursraum,第四个表是 kursplan_trainer。

第一个表结构:id,club_id,Tag,Kurse_namen,from,to,Kursleiter,kursraum

这里的 club_id 表示我的用户表中的用户 ID

id     |   club_id         |    Tag      |Kurse_namen  | Kursleiter| kursraum
____________________________________________________________________________________________
1      |         35         |     Monday |2           |2           | 4
2      |         35         |     tue    |3           |3           | 3
3      |         35         |    wen     |3           |3           | 3 
4      |         12         |    thu     |1           |2           | 4

第二个表结构:表名[kursplan_kurse]

id     |    club_id    | Kurse_namen    
______________________________________
1      |         35       |     Kurse1
2      |         35       |     Kurse2
3      |        35        |     Kurse3
4      |         35       |    Kurse4

第三张表结构:表名[kursplan_kursraum]

id     |    club_id    | kursraum   
______________________________________
1      |         35        |     kursraum1
2      |         35         |    kursraum2
3      |        35         |     kursraum3
4      |         35       |    kursraum4

第4个表结构:表名[kursplan_trainer]

id     |    club_id    | Kursleiter 
______________________________________
1      |         35        |     Kursleiter1
2      |         35         |    Kursleiter2
3      |        35         |    Kursleiter3
4      |         35       |  Kursleiter4

我的选择查询是

$query = "SELECT * FROM `kursplan` WHERE `club_id` = '35' AND `Tag` = 'Monday' ";

我得到这种格式的结果

Kurse_namen | kursraum  |Kursleiter |
=====================================
2           | 4        |2          |

现在,我想要实现的是设置一个 JOIN 查询以从所有 3 个表中获取值 分别是第 2、3、4 个表

我需要这种格式的结果我的意思是我想要名字而不是数字

Kurse_namen    |   kursraum       | Kursleiter     
______________________________________________
Kurse2     |   kursraum4  |    Kursleiter2

请帮帮我。

【问题讨论】:

  • 修正你帖子的格式,现在它不可读
  • 首先不要执行 select *. 执行 select a.field, b.field c.field 其中 a b 和 c 是不同的表标识符 FROM table a, table b, table c WHERE a.field=b.field 然后使用它来计算如何进行连接。 codinghorror.com/blog/2007/10/…
  • 你的 mysql 设置很糟糕。如果您的表主键行不全部命名为“id”会更好。为什么“club_id”根本不是主键?并请告诉我们桌子的名称(我想我们都可以数自己)

标签: php mysql


【解决方案1】:

虽然你的问题不清楚,如果你与连接有关,你可以通过这个 sql 理解它。

    select t2.Kurse_namen,t3.kursraum,t4.Kursleiter
    from table2 t2,table3 t3,table4 t4,table1 t1
    where t2.club_id=t3.club_id
    and t3.club_id=t4.club_id
    and t1.club_id=t2.club_id
    and t2.club_id=35
    and t1.tag='Monday'

【讨论】:

  • 这会产生很多行,因为我的数据库必须只返回一行
【解决方案2】:

对 ex. 使用左连接。

SELECT `TABLE2 NAME`.`FIELd NAME`, `TABLE3 NAME`.`FIELD NAME` , `TABLE4 NAME`.`FIELD NAME`
        FROM `TABLE NAME` 
        LEFT JOIN `TABLE2` 
            ON `TABLE2`.`FIELD(UNIQUE DATA EXAMPLE ID)` = `TABLE3`.`FIELD(UNIQUE DATA EXAMPLE ID)` `TABLE4 NAME`.`FIELD NAME(UNIQUE DATA EXAMPLE ID)`

【讨论】:

    【解决方案3】:
    $query = "SELECT `b`.`Kurse_namen`, `c`.`kursraum`, `d`.`Kursleiter`, 
    FROM `kursplan` as `a`
    JOIN `kursplan_kurse` as `b` ON `b`.`id` = `a`.`Kurse_namen`
    JOIN `kursplan_kursraum` as `c` ON `c`.`id` = `a`.`kursraum`
    JOIN `kursplan_trainer` as `f` ON `f`.`id` = `a`.`Kursleiter`
    WHERE `a`.`club_id` = '35' AND `a`.`Tag` = 'Monday'";
    

    【讨论】:

      【解决方案4】:

      我认为你必须这样做INNER JOINs

      这可能可行: ($query =)

      SELECT kursplan_kurse.Kurse_namen, kursplan_kursraum.kursraum,
      kursplan_trainer.Kursleiter FROM `kursplan` 
      INNER JOIN kursplan 
      INNER JOIN kursplan_kursraum
      INNER JOIN kursplan_trainer 
      USING(club_id) WHERE `club_id` = '35' AND `Tag` = 'Monday'
      

      【讨论】:

        【解决方案5】:

        以下查询将输出您需要的数据:

        SELECT kk.Kurse_Namen, kr.kursraum, kt.kursleiter FROM kursplan k
        LEFT OUTER JOIN kursplan_kurse kk (k.Kurse_namen = kk.id)
        LEFT OUTER JOIN kursplan_kursraum kr (k.kursraum = kr.id)
        LEFT OUTER JOIN kursplan_trainer kt (k.Kursleiter = kt.id)
        WHERE k.club_id = 35
        AND Tag = "Monday"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-11
          • 2020-01-21
          • 2022-09-27
          • 2023-04-01
          • 2013-11-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多