2014-12-02 5 views
2

저는 직장에있는 CRM의 급여 시스템에서 일하고 있으며, 중복 된 데이터를 저장해야하는 것을 피하려고합니다. 쌓을 것이다.하나의 테이블에서 레코드를 선택하고 다른 테이블의 열을 사용하여 결과를 정렬하십시오.

나는 "how to get value from mysql table ordered by another table?"과 관련을 시도했지만 운이 없었습니다.

나는

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

나는 또한 분명 짧은 유지를 위해 나는이 질문에 약간을 응축 한 각 개별 세션의 데이터를 저장하고 Timesheets 테이블이 전체를 벗어났습니다 Users 테이블을 가지고 시작과 끝 날짜/시간. 내가 무엇을 달성하고자하는

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

Timesheets 표를 파생 단지 사용자 이름과 Users 테이블의 last_name 열을 기준으로 Timesheets 테이블에서 결과를 정렬하는 것입니다. 여기를 시도하려고 무엇

:

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

MySQL은 분명히 내 틈새 아니라, 어떤 쿼리는 원하는 결과를 제공 할 것이다? ORDER BY 전에 필요에 따라

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

당신은 WHERE 절을 추가 할 수 있습니다 :

답변

3

당신은이 JOIN이 같은 다음 ORDER BY, 사용해야 할 것입니다.

+0

, 당신의 대답 +1 감사합니다 – zanderwar

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 
관련 문제