2017-02-10 1 views
0

안녕하세요, 저는 여기에 뭔가 복잡한 것을 시도한다고 생각합니다. 어쩌면 여기서 너를 도울 수있을거야.mysql이 사용자 ID가있는 두 개의 테이블을 선택하고 타임 스탬프를 비교하여 그것을 계산합니다.

나는 두 개의 테이블을 가지고 있습니다 : 수입과 지불금입니다.

수입에는 datetime 및 기타 자료로 userid, amount, timestamp가 있습니다. 사용자가 무엇인가를 얻었을 때 정보 만 있습니다. 예 :

id | user_id | amount | timestamp | 
1 | 2  | 1050 | 31days ago | 
2 | 1  | 20  | 10days ago | 
3 | 1  | 10  | 9 days ago | 
4 | 2  | 10000 | 9 days ago | 
... 

지불금 사용자가 X 실적 이상이면 지급에 대한 항목을 날짜로 사용자 ID, 양, 타임 스탬프를 가지고있다 지금 내 문제에 1000 예

id | user_id | payout_amount | timestamp | 
1 | 2  | 1050   | 30days ago | 
... 

말할 수 있습니다. 얼마나 많은 판매 대금이 지급되지 않았는지 (대금 지급 항목이없는) COUNT 개를보고 싶습니다. 이것은 의미합니다. payouts.timestamp와 동일한 사용자 ID가있는 earnings.timestamp를 비교하고 지불 항목에 새 항목이 있는지 확인해야합니다. 그렇다면 얼마나 많은 지 계산하십시오. (그래서 나는 처음에 수입을 합산하는 데 필요한 것을 생각합니다). 이것이 가능한지 확실하지 않습니다.

mysql과 혼자서는 불가능한 PHP로도 할 수 있습니다.

예를 들어 결과는 다음과 같아야합니다. 사용자 ID 1의 수입이 30이므로 금액에 도달하지 않았으므로 지급액 테이블에 항목이 없습니다. 사용자 ID 2는 10000이지만 우리는 지불금 테이블을 실행하거나 지불 항목 테이블에 항목을 만들지 않아 지불금이 없습니다. 그는 단지 오래된 지불금을 가지고 있고 새로운 수입은 지불되지 않습니다.

편집 : 10 일 전의 것들이 단지 예입니다. 내가 거기 실제 날짜 유형 EDIT2를 사용

select COUNT(e.amount) FROM earnings e, payouts p where p.payout_timestamp < e.timestamp AND p.user_id = e.user_id GROUP BY p.user_id, e.user_id 

이 이동 :

| Count(e.amount) | 
| 2    | 
| 1    | 

답변

1

내가 타임 스탬프를 비교하는 얻을 당신 것이 될 수있는 유일한 방법이 아니라고 생각 나는이 하나를 시도 말을 잊어 버려 필요한 것. 이 테이블에 대한 수익 및 지급 내역이 올바르게 표시되면 각 사용자에 대한 총 수입과 지불액을 합산하고 소득보다 적은 금액을 가진 user_id 번을 모두 계산하여 비교할 수 있습니다. 예를 들어 :

SELECT user_id, SUM(amount) as amount FROM earnings GROUP BY user_id; 

는 각 사용자에 대해 수입을 요약

SELECT user_id, SUM(payout_amount) as amount FROM payouts GROUP BY user_id; 

각 사용자에 대해 지불을 요약한다.당신의 테이블 예를 들어

SELECT COUNT(e1.user_id) FROM (SELECT user_id, SUM(amount) as amount FROM earnings GROUP BY user_id) as e1 LEFT JOIN (SELECT user_id, SUM(payout_amount) as amount FROM payouts GROUP BY user_id) as p1 ON e1.amount > p1.amount; 

내 결과가되었다 : 지급 금액이

+-------------------+ 
| COUNT(e1.user_id) | 
+-------------------+ 
|     2 | 
+-------------------+ 

그리고 찾기 위해 사용자가 할뿐만 아니라 사용

지금 그들에 가입하고 이익보다 지불 할 수있는 사용자를 사용자 카운트 왼쪽 COUNT() 함수가없는 동일한 검색어 :

내 의견으로는이 방법은 더 많이 사용됩니다.

1) 사용자가 1000

2를 획득 한 후 사용자가 2000

3)를 취득) : 예를 들어, 지불의 순간에 전체 사용자의 이익보다 적은 양으로 최근의 지불을 가질 수 있기 때문에 BLE 해당 사용자가 지불 한 후 1000

이 상황에서 지불 금액을 비교하지 않은 타임 스탬프를 비교하면이 사용자에게 지불 할 금액이없는 반면 2000을 지불해야하는 것으로 나타납니다.

관련 문제