从一个表中选择记录,并使用另一个表中的列对结果进行排序

时间:2014-12-02 11:33:04

标签: php mysql

我正在研究位于我工作中的CRM的工资单系统,我正在努力节省存储多年来将会堆积的冗余数据。

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

我有Users

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

我还有一个Timesheets表,用于存储每个单独会话的数据,为了保持简短,我在这个问题中略微缩小了一点,显然错过了开始和结束的完整日期/时间。 / p>

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

我想要实现的是在Timesheets表中last_name列的Users表中仅使用Timesheets派生的用户名来排序结果表

我想在这里尝试:

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

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

3 个答案:

答案 0 :(得分:3)

您必须使用JOIN然后使用ORDER BY,如下所示:

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

您可以根据需要在WHERE之前添加ORDER BY子句。

答案 1 :(得分: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

答案 2 :(得分:1)

使用join:

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