2011-01-28 4 views
0

죄송합니다 예제,하지만 뭔가가 SQL 누락되었습니다 및 나는 무엇인지 모르겠다 근본적인 믿습니다. 나는이 미친 쿼리를 가지고 ... ORDER BY 절이 없기 때문에 내부 쿼리에서SQL에서 열 최대 버블 링

SELECT * 
    FROM (
    SELECT * 
    FROM (
    SELECT @t1 := @t1 +1 AS leaderboard_entry_youngness_rank, 1 - @t1 /100 AS 
     leaderboard_entry_youngness_based_on_expiry, leaderboard_entry . * , 
     NOW() - leaderboard_entry_timestamp AS leaderboard_entry_age_in_some_units, 
     TO_DAYS(NOW()) - TO_DAYS(leaderboard_entry_timestamp) 
     AS leaderboard_entry_age_in_days 
    FROM leaderboard_entry) AS inner_temp 
    NATURAL JOIN leaderboard 
    NATURAL JOIN user 
    WHERE (
    leaderboard_load_key = 'sk-en-adjectives-1' 
    OR leaderboard_load_key = '-sk-en-adjectives-1' 
    ) 
    AND leaderboard_quiz_mode = '0' 
    ORDER BY leaderboard_entry_age_in_some_units ASC , leaderboard_entry_timestamp ASC 
    LIMIT 0 , 100 
) AS outer_temp 
ORDER BY leaderboard_entry_elapsed_time_ms ASC , leaderboard_entry_timestamp ASC 
LIMIT 0 , 50 

I added the second nested SELECT statement because the user_name in the user table was not being returned in the outermost query. But now the leaderboard_entry_youngness_based_on_expiry field, which is being generated based on a row index ratio, is not working correctly.

If I remove the second nested SELECT statement, the leaderboard_entry_youngness_based_on_expiry works as expected, but the user_name column is not returned.

How can I satisfy both? Why is this happening?

Thanks!

This stems from the following question:

Add a numbered list column to a returned MySQL query

+0

어디'user_name' 열에서 오는? 1 개 이상의 테이블에서 가능합니까? –

+0

user_name 열이 사용자 테이블에서 왔고 여러 테이블에 없다고 생각하면 안됩니다. ( – swinefeaster

+0

쿼리를 실행하기 전에 세션 변수를 '@ t1'으로 설정할 때마다 0으로 설정 했습니까? –

답변

1

내부 SELECT 문에 user.user_name이 없으므로 username이 반환되지 않습니다. 외부 쿼리를 제거, 이전처럼 할 수 있지만,이 같은 user.user_name로 :

.... 
SELECT @t1 := @t1 +1 AS leaderboard_entry_youngness_rank, 1 - @t1 /100 AS 
    leaderboard_entry_youngness_based_on_expiry, leaderboard_entry . * , 
    NOW() - leaderboard_entry_timestamp AS leaderboard_entry_age_in_some_units, 
    TO_DAYS(NOW()) - TO_DAYS(leaderboard_entry_timestamp) 
    AS leaderboard_entry_age_in_days, user.user_name 

.... 
+0

멋진 작품! 내가 사용자를 할 수있는 방법이 있습니다. * 해당 테이블의 다른 모든 열을 얻으려면? 또는 하나씩 나열해야합니까? 또는 일반적으로 하나씩 나열하는 것이 더 좋습니다. – swinefeaster

+0

'user. * '할 수 있습니다. 'user. user_name'을'user. *'로 대체하십시오. – shamittomar

+0

그것은 그것을 좋아하지 않는다. 그것은 중복 열 user_id를 말합니다. (자연스럽게 사용자와 leaderboard_entry에 합류하는 것입니다) – swinefeaster

0

Try putting a ORDER BY이 있는데, "올바르게 작동하지 않습니다."라는 잘못된 말입니다.

외부 SELECT * FROM...을 제거했는지 확인하고 중복 된 user_name 열이 있는지 확인하십시오.

현재, 쿼리에서 행 인덱스 열을 사용하지 않으므로이 논리를 응용 프로그램 자체에 넣지 않는 이유는 무엇입니까? 더 신뢰할 수있을 것입니다.

+0

감사하지만 생각에 잘못 생각한 것 같습니다. 순서가 잘못되었습니다. 중복 된 user_name 열은 없습니다. 유일한 문제는 user_name 열이 결과 쿼리에 버블 링되지 않는다는 것입니다. – swinefeaster

+0

타임 스탬프에 의해 생성되기 때문에 응용 프로그램 자체에 행 인덱스를 넣을 수 없습니다. 행에 저장 한 다음 경과 시간을 고려하여 원래 행 색인을 응용 프로그램에 표시 할 열 필드로 유지합니다. – swinefeaster

+0

@swinefeaster 죄송합니다. 다시 시작해보십시오 :-). 'leaderboard_entry','leaderboard' 및'user' 테이블에 대한 테이블 정의를 게시 할 수 있습니까? –

관련 문제