2014-04-09 32 views
0

我有以下MySQL表,你不能訪問的關係:MySQL查詢,其中通過加入

+--------------------+----------+------+-----+---------+----------------+ 
| Field    | Type  | Null | Key | Default | Extra   | 
+--------------------+----------+------+-----+---------+----------------+ 
| id     | int(11) | NO | PRI | NULL | auto_increment | 
| firstName   | longtext | NO |  | NULL |    | 
| lastName   | longtext | NO |  | NULL |    | 
| username   | longtext | NO |  | NULL |    | 
+--------------------+----------+------+-----+---------+----------------+ 

和:

+------------------------+----------+------+-----+---------+----------------+ 
| Field     | Type  | Null | Key | Default | Extra   | 
+------------------------+----------+------+-----+---------+----------------+ 
| id      | int(11) | NO | PRI | NULL | auto_increment | 
| trainee_id    | int(11) | NO | MUL | NULL |    | 
| date     | date  | NO |  | NULL |    | 
| duration    | time  | NO |  | NULL |    | 
| educationDepartment | longtext | NO |  | NULL |    | 
| completedtasks   | longtext | NO |  | NULL |    | 
+------------------------+----------+------+-----+---------+----------------+ 

我有兩個條件。我的第二張表有一個開始和一個結束日期,我想要一個特定用戶的數據,我可以通過第一個表的「用戶名」進行驗證。它看起來像這樣:用戶名已知>我將獲得用戶的id(外鍵)>現在我可以使用此外鍵從第二個表中獲取用戶特定的數據。我開始我的MySQL查詢,它看起來像這個atm:

SELECT date, duration, educationDepartment, completedtasks FROM programm_completedtask WHERE date BETWEEN "2014-04-07" AND "2014-04-11"; 

但我怎麼能使它現在用戶特定?重要提示:我只想要一個MySQL查詢,PHP或類似的東西不會幫助我:/

回答

1

這將結果限制爲一個特定的用戶:

SELECT date, duration, educationDepartment, completedtasks 
FROM programm_completedtask 
WHERE date BETWEEN '2014-04-07' AND '2014-04-11' 
AND trainee_id = (select id from users where username = 'XYZ'); 
+0

這工作!我幾乎正確地嘗試了你所做的xP我沒有在第二個select語句之前和之後設置() –

1

是這樣的?

SELECT table2.username, table1.date, table1.duration, table1.educationDepartment, table1.completedtasks FROM table1 LEFT JOIN table2 ON table2.id = table1.trainee_id WHERE table1.date BETWEEN "2014-04-07" AND "2014-04-11" AND table1.username = 'someuser';

1

如果你想從兩個表的結果,你應該使用INNER JOIN

SELECT u.username, p.date, p.duration, p.educationDepartment, p.completedtasks 
FROM programm_completedtask AS p 
INNER JOIN users AS u ON u.id = p.trainee_id 
WHERE date BETWEEN "2014-04-07" AND "2014-04-11" 
AND u.username = "knownusername";