2014-12-02 54 views
2

我正在为位于我工作中的CRM的工资系统工作,并且我试图保存必须存储一段时间内的冗余数据将堆积起来。从一个表中选择记录并使用另一个表中的列对结果进行排序

我试图把它与“how to get value from mysql table ordered by another table?”联系起来,但没有运气。

我有一个Users

=========================================== 
# id | username | first_name | last_name # 
=========================================== 
# 1 | joe | Joe  | Blow # 
=========================================== 

我也有一个Timesheets表,它储存保持短的缘故,我已经在这个问题上凝聚了一点每个单独的会话的数据,显然错过了全日期/时间在开始和结束。

============================================ 
# id | username | start | finish # 
============================================ 
# 1 | joe | 00:00 | 23:59 # 
============================================ 

我想达到什么是由last_name列在Users表只是来源的Timesheets表的用户名顺序从Timesheets表中的结果。

什么我想尝试在这里:

SELECT * FROM `Timesheets` WHERE `start` >= '{$monday}' AND `finish` <= '{$sunday}' ORDER BY (`Users`.`last_name` WHERE `username` = `Timesheets`.`username`) ASC 

的MySQL显然不是我的利基,有什么查询将提供所需的结果?

回答

3

你必须使用一个JOIN然后ORDER BY,像这样:

SELECT ts.* 
FROM timesheets ts 
JOIN users 
ON ts.username = users.username 
ORDER BY users.last_name 

ORDER BY之前,如有必要您可以添加的WHERE条款。

+0

谢谢您的回答,+1 – zanderwar 2014-12-02 11:48:20

2

使用JOIN

SELECT * 
FROM Timesheets T 
JOIN Users U ON T.username = U.username 
WHERE T.start >= '{$monday}' AND `finish` <= '{$sunday}' 
ORDER BY U.last_name ASC 
1

使用加入此:

SELECT t.* 
FROM timesheets t 
JOIN users 
ON t.username = users.username WHERE t.start >= '{$monday}' AND t.finish <= '{$sunday}' 
ORDER BY users.last_name 
相关问题