2013-05-11 81 views
2

SQL yapısı頂部評論Sql查詢

我的MySql查詢存在問題。你能幫我解決嗎?

我有一個數據庫如在上面的圖片,並且有用戶ID屬於每個用戶。它應該按類型降序排序。它記錄與被在數據庫中的日期時間單元格的那一刻寫的PHP time()函數的時間。然而,我使用的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不顯示正確的主題。所以,我一直在尋找了兩天,我覺得有我不理解或不能看到的一個問題。

正確的查詢應該像在下面的圖片: enter image description here

如果你幫助我很欣賞!

回答

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 
+0

不工作這個問題 – pirpirim 2013-05-11 14:13:58

+0

@CihanÖĞÜT以及我想問題是rateID。你對同一個userID有多個註釋。如果rateid是外鍵?如果是的話,你可以張貼表這裏 – Yogus 2013-05-11 14:17:44

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 

此發現爲每個用戶MAXRATE然後加入回到談判桌來獲取該速率的主題。你的maxdate列似乎是你想要的。如果你想爲maxrate的日期,那麼你可能還希望把它從t

+0

當我使用這個sql查詢我有一個錯誤信息,那就是MySQL表示: #1054 - 未知列「kim.rateid」在「關於條款」 – pirpirim 2013-05-11 16:46:31

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