Php 复杂sql查询中的Distinct

Php 复杂sql查询中的Distinct,php,sql,mysql,Php,Sql,Mysql,我还有一个给你们。我到处找了找,但找不出这个问题的原因 基本上,我想做一个独特的on user_id,它是一个自然连接的列,存在于tables user和leadboard_条目中 这是我最初的查询,效果很好,但我想过滤掉重复项,只显示最快的用户分数。内部查询基本上获取100个最近的行,而外部查询通过提升排行榜条目和已用时间来获取这些行。 我尝试了以下方法,删除了排行榜条目。*,并添加了独特的关键字,如so,以及我需要的列的显式命名: 但我得到了这个错误,这毫无意义…: 非常感谢任何帮助!

我还有一个给你们。我到处找了找,但找不出这个问题的原因

基本上,我想做一个独特的on user_id,它是一个自然连接的列,存在于tables user和leadboard_条目中

这是我最初的查询,效果很好,但我想过滤掉重复项,只显示最快的用户分数。内部查询基本上获取100个最近的行,而外部查询通过提升排行榜条目和已用时间来获取这些行。

我尝试了以下方法,删除了排行榜条目。*,并添加了独特的关键字,如so,以及我需要的列的显式命名:

但我得到了这个错误,这毫无意义…:

非常感谢任何帮助!

上面由Scrum Meister回答

你看过GROUP by子句了吗?distinct在行上工作,您不能将其仅应用于特定列,distinct关键字必须位于SELECT之后和任何列的hanks之前!我将使用哪个聚合函数?我不想总结任何东西等等,你是对的,这完全是分组条款。我使用了类似的方法:按用户id从排行榜条目组中选择Leadboard\u entry\u id、Leadboard\u entry.user\u id、MinLeadboard\u entry.Leadboard\u entry\u Passed\u time\u ms。您可以将此添加为答案以便我可以接受吗?谢谢 set @t1=0; 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 , leaderboard.leaderboard_quiz_mode , leaderboard.leaderboard_load_key , user.user_name from leaderboard_entry natural join leaderboard natural join user where (leaderboard_load_key = 'es-en-animals-1' or leaderboard_load_key = '-es-en-animals-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 set @t1=0; select * from ( select @t1 := @t1+1 as leaderboard_entry_youngness_rank, 1-@t1/100 as leaderboard_entry_youngness_based_on_expiry,

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 , leaderboard.leaderboard_quiz_mode , leaderboard.leaderboard_load_key , user.user_name

distinct leaderboard_entry.user_id, leaderboard_entry.leaderboard_entry_id, leaderboard_entry.leaderboard_id, leaderboard_entry.leaderboard_entry_timestamp, leaderboard_entry.leaderboard_entry_elapsed_time_ms,

from leaderboard_entry natural join leaderboard natural join user where (leaderboard_load_key = 'es-en-animals-1' or leaderboard_load_key = '-es-en-animals-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 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'distinct leaderboard_entry.user_id, leaderboard_entry.leaderboard_entry_id, ' at line 12