2010-10-20 56 views
2

所以我的網站的主頁顯示的PMP應用程序。用戶可以使用「喜歡」,「不喜歡」或「中性/無」評分這些應用(默認情況下,每個應用的評分爲中性/無)。SQL列表遊戲數據庫最喜歡

在主頁上,我想列出遊戲的最高差(所以需要將Like和Dislike的總數加在一起。)我很難使SQL語句正確地做到這一點。

我的表結構是這樣的:

 
appinfo: 
    id; 
    name; 
    genre; 
    ... 

appinfo基本上包含所有的應用程序的元數據。關於評級沒有什麼。

接下來,我有apprating表:

 
apprating: 
    username; 
    app_id; 
    rating; 

這是所有的評級被存儲。評分存儲爲-1(不喜歡),0(中性/無)和1(喜歡)。我希望這個結構能夠更容易地設置整個陳述。任何人都可以幫我寫一篇嗎?我最終寫了一個可笑的長文章,沒有正確排序或顯示評級數字。

SELECT appinfo.title, appinfo.description, appinfo.username, appinfo.genre 
FROM appinfo 
LEFT JOIN appratings ON appinfo.id=appratings.app_id 
GROUP BY appinfo.id 
ORDER BY SUM(appratings.rating) DESC 

非常感謝您通過閱讀,只是一個SQL語句和糾正對我的邪惡SQL的方式將是很好!

UPDATE:

所以之前有一個評級系統,我有我的SELECT語句,然後在PHP中我最好mysql_fetch_array,然後通過循環和呼應他們的詳細資料,有效地讓我做的事情,如:

... 
<p class="description"><?php echo $gameinfo['description']; ?></p> 
... 

哪一個會抓住遊戲的描述並回應它。現在,說明仍然有效,但因爲我現在有涉及使用SUM和我一樣的/不喜歡的一個奇怪的系統和appinfo.id和apprating.app_id連接語句,我現在

  1. 迴響遇到問題當前遊戲的ID,(回聲$gameinfo['id']不會迴應任何內容。)
  2. 如何獲得Like/Dislike的SUM並回顯?

更新2

的SQL語句讓我寫echo $gameinfo['totalscore']讓喜歡/不喜歡分歧,我不得不添加appinfo.id的選擇要能夠呼應ID。

回答

2

您的GROUP BY子句需要包含SELECT列表中未以某種方式進行聚合的所有列。您可能碰巧知道特定應用的描述,標題和其他詳細信息不會更改,但數據庫引擎不會,因此需要 來了解每個選定列是否已修復(作爲GROUP BY的一部分) )或聚合(SUM,COUNT,MIN,MAX等)

SELECT appinfo.title, appinfo.description, appinfo.username, appinfo.genre, 
    SUM(appratings.rating) AS totalscore 
FROM appinfo LEFT JOIN appratings 
ON appinfo.id=appratings.app_id 
GROUP BY appinfo.title, appinfo.description, appinfo.username, appinfo.genre 
ORDER BY totalscore DESC 
; 
+0

我覺得這很愚蠢,因爲我意識到我原來的問題是錯誤的。這是正確的,但我正確地得到了一切。如果你能幫助我解決這個問題,我應該問這個問題,這也是非常棒的。 (更新主文章。) – NessDan 2010-10-20 23:41:08

+1

appinfo.id列未包含在原始SELECT中,因此它不適用於使用該結果集的任何PHP例程。在SELECT子句和GROUP BY子句中包含appinfo.id,它將包含在PHP代碼將檢索的結果集中。 – 2010-10-21 00:03:08

+0

對不起,在發佈內容之前,我真的需要三思而後行,我發現你的SQL語句讓我回聲totalscore(真棒!) – NessDan 2010-10-21 00:06:45

1

看看你是否通過更改GROUP列BY子句得到正確的結果。

SELECT appinfo.title, appinfo.description, appinfo.username, appinfo.genre 
FROM appinfo 
LEFT JOIN appratings ON appinfo.id=appratings.app_id 
GROUP BY appinfo.title, appinfo.description, appinfo.username, appinfo.genre 
ORDER BY SUM(appratings.rating) DESC