时间:2017-01-09 02:35:54

标签: mysql sql mysqli

我有三张桌子(为此目的而简化)

Table 1: File
id, name
1, File1
2, File2
3, File3
4, File4

Table 2: Meeting_File
id, meeting_id, file_id
1, 1, 1
2, 2, 2
3, 3, 3
4, 4, 4

Table 3: Meeting
id, name, password
1, Bil1/2016, Password1
2, Bil2/2016, Password2
3, Bil3/2016, Password3
4, Bil4/2016, Password4

如果会议密码和文件名共享同一个会议的ID,事情很简单,我们可以使用

SELECT b.password FROM File a 
LEFT JOIN Meeting_File c ON c.file_id = a.id 
LEFT JOIN Meeting b ON b.id = c.meeting_id
WHERE a.id = 1

但是,在我们的例子中,密码总是在一行之后。

要打开属于Meeting id = 1的File1,我们需要来自Meeting id = 2

的密码

要打开属于Meeting id = 2的File2,我们需要来自Meeting id = 3

的密码

依旧......

总结一下,我们有过去会议的文件,只能用当前会议的密码打开。

如何获取密码?

2 个答案:

答案 0 :(得分:1)

您的数据库设计不佳。你可以使用下面的一些昂贵的SQL

SELECT 
    (select password from meeting m where id > mf.meeting_id order by meeting_id limit 0,1) as password
        FROM File f 
        LEFT JOIN Meeting_File mf
        ON (mf.file_id = f.id) 
        WHERE f.id = 1;

答案 1 :(得分:0)

只需添加1:

SELECT m.password
FROM File f LEFT JOIN
     Meeting_File mf
     ON mf.file_id = f.id LEFT JOIN
     Meeting m
     ON m.id = mf.meeting_id + 1
WHERE f.id = 1;