SQL列表游戏数据库最喜欢

时间:2010-10-20 23:09:51

标签: php sql mysql

所以我网站的主页面显示了PMP的应用程序。用户可以使用“赞”,“不喜欢”或“中性/无”对这些应用进行评级(默认情况下,每个应用的评级均为中性/无。)

在主页面上,我想以最高的差异列出游戏(所以它需要总和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方式会很好!

更新:

所以在有评级系统之前,我会有我的SELECT语句,然后在PHP中我mysql_fetch_array,然后循环并回显他们的细节,有效地让我做以下事情:

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

哪个会抓住它所在的游戏描述并回应它。现在,描述仍然有效,但由于我现在有一个奇怪的系统,涉及使用SUM和我的Like / Dislike和appinfo.id和apprating.app_id的JOIN语句,我现在遇到了问题

  1. 回应当前游戏的ID,(回显$gameinfo['id']不回应任何内容。)
  2. 我怎样才能得到喜欢/喜欢的总和并回应那个?
  3. 更新2

    SQL语句允许我编写echo $gameinfo['totalscore']来获取Like / Dislike差异,我只需要将appinfo.id添加到SELECT以便能够回显ID。

2 个答案:

答案 0 :(得分: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
;

答案 1 :(得分: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