在Sql中冒泡列

时间:2011-01-28 08:27:45

标签: sql mysql

请原谅这个令人费解的例子,但我相信有一些关于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

我添加了第二个嵌套的SELECT语句,因为最外层查询中没有返回user表中的user_name。但是现在,基于行索引比率生成的leaderboard_entry_youngness_based_on_expiry字段无法正常工作。

如果删除第二个嵌套的SELECT语句,则leaderboard_entry_youngness_based_on_expiry按预期工作,但不返回user_name列。

我怎样才能满足两者?为什么会这样?

谢谢!

这源于以下问题:

Add a numbered list column to a returned MySQL query

2 个答案:

答案 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

....

答案 1 :(得分:0)

尝试在最内层的查询中放置一个ORDER BY,因为当前没有ORDER BY子句,错误地说“工作不正常”。

检查您是否带走了外部SELECT * FROM...,看看是否有重复的user_name列。

BTW,既然你没有在查询中使用行索引列,为什么不把这个逻辑放在应用程序本身?这样做会更可靠。