热门评论Sql查询

时间:2013-05-11 13:55:22

标签: php mysql sql

SQL yapısı

我的MySql查询存在问题。你可以帮帮我吗?

我有一个如上图所示的数据库,并且有属于每个用户的用户标识。它应按类型降序排序。它使用PHP time()函数记录时间,该函数在当时写入数据库中的datetime单元格。但是,我使用的SQL查询给出了一个结果,如下图所示:

SELECT 
  user.username, 
  kim.userid,
  kim.subject, 
  count(kim.userid), 
  max(kim.dateline),
  max(kim.rateid) 
FROM test as kim 
INNER JOIN user 
WHERE user.userid = kim.userid 
GROUP BY kim.userid limit 10)

enter image description here

虽然我得到了正确的结果,但由于rateid没有显示正确的主题,我仍然有一点问题。所以,我一直在寻找它两天,我认为有一个我不明白或看不到的问题。

正确的查询应该像下图中的on: enter image description here

如果你帮忙,我感激不尽!

3 个答案:

答案 0 :(得分:1)

您正尝试从具有最大rateid的行获取信息以及汇总信息。为此,您需要加入原始表:

select kim.userid, u.username, kim.cnt, kim.maxdate, kim.maxrate, t.subject
from (SELECT kim.userid, count(kim.userid) as cnt,
             max(kim.dateline) as maxdate, max(kim.rateid) as maxrate
     FROM test kim 
     GROUP BY kim.userid
     limit 10
    ) kim INNER JOIN
    user u
    on u.userid = kim.userid join
    test t
    on kim.userid = t.userid and
       kim.maxrate = t.rateid

这会找到每个用户的最大值,然后加入表格以获得该费率的主题。您的maxdate列似乎就是您想要的。如果您想要maxrate的日期,那么您可能还想从t获取该日期。

答案 1 :(得分:0)

试试这个

Select user.username, kim.userid ,kim.subject, count(kim.userid), max(kim.dateline),
max(kim.rateid) 
from test as kim
left join user ON user.userid = kim.userid group by kim.userid limit 10

答案 2 :(得分:0)

感谢您的关注,

我找到了解决问题的方法。解决方案应该是这样的:

SELECT subject FROM test WHERE 
userid=user.userid ORDER BY dateline desc LIMIT 1)
 AS subject,
 (SELECT COUNT(*) FROM test
 WHERE userid=user.userid) AS adet
 FROM user limit 10