繁体   English   中英

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

[英]Select records from one table and sort the result using a column from another table

我正在为位于我公司的CRM的薪资系统工作,我正试图省去存储冗余数据的麻烦,这些冗余数据将在几年内堆积起来。

我试图将其与“ 如何从另一个表排序的mysql表中获取价值? ”联系起来,但是没有运气。

我有一个Users

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

我还有一个Timesheets表,用于存储每个会话的数据,为了简短起见,我在这个问题上做了一些总结,显然错过了开始和结束的完整日期/时间。

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

我要实现的是通过Users表中的last_name列对Timesheets表中的结果进行排序,仅使用派生自Timesheets表的用户名。

我在这里尝试尝试的是:

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

MySQL显然不是我的利基市场,哪种查询可以提供所需的结果?

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

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

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

使用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

为此使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM