2011-01-28 7 views
0

Простите свернутый пример, но я считаю, что есть что-то фундаментальное в sql, которого я пропускаю, и я не уверен, что это такое. У меня есть этот безумный запрос ...Bubbling Up Columns in 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 исходит из таблицы пользователя, а nope это не в нескольких таблицах :( – swinefeaster

+0

вы не задали для каждой переменной сеанса '@ t1' значение 0 каждый раз перед запуском запроса? –

ответ

1

В вашей внутренней инструкции SELECT у вас нет user.user_name, поэтому имя пользователя не возвращается. Удалите внешний запрос, сделайте это как раньше, но с 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

удивительный, который работает! есть ли способ, которым я могу сделать user. *, чтобы получить все остальные столбцы в этой таблице? или я должен перечислять их один за другим? или вообще лучше перечислить их один за другим? – swinefeaster

+0

Вы можете использовать 'user. *'. Просто замените 'user.user_name' на' user. * '. – shamittomar

+0

ему это не нравится. он говорит, что есть дублированный столбец user_id (это тот, с которым я естественным образом присоединяюсь к пользователю и leaderboard_entry) – swinefeaster

0

Try putting a ORDER BY во внутреннем большинстве запросов, так как в настоящее время нет предложения ORDER BY, его неправильно сказать, что «работает неправильно».

Проверьте, не забрали ли вы внешний SELECT * FROM..., проверьте, имеются ли дубликаты столбцов user_name.

BTW. Поскольку вы не используете столбцы индекса строки в своем запросе, почему бы просто не поместить эту логику в само приложение? это будет более надежно.

+0

Спасибо, но я думаю, что вы неправильно поняли. В заказе нет ничего плохого. Нет дубликатов столбцов user_name. только проблема состоит в том, что столбец user_name, среди прочего, не пузырится до полученного запроса. – swinefeaster

+0

Я не могу поместить индексы строк в самом приложении, потому что хочу, чтобы они были сгенерированы по метке времени, которая станет «возрастом» строк, а затем прибегать к истекшему времени, сохраняя исходные индексы строк в виде полей столбцов для отображения в приложении – swinefeaster

+0

@swinefeaster Извините, давайте начнем с :-). Можете ли вы разместить определения таблиц для таблиц 'leaderboard_entry',' leaderboard' и 'user'? –