2014-04-09 34 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";