我正在研究位于我工作中的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显然不是我的利基,什么查询会提供所需的结果?
答案 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