2013-03-24 103 views
0

对于新版本的网站,我在主页上设置了“顶级用户”部分。这使得人们可以在一堆不同的类别上为用户投票。所有这些信息都存储在两个主表的MySQL数据库中。一个表包含信息(id * autogenerated *,用户名,添加日期等),另一个表具有费率(id * autogenerated *,linkID,rowAvg,avg,avg2等)。来自费率表的linkID对应于信息表中的id。查询的工作原理是通过rate_table进行查询,按最高平均数对其进行排序,然后选择前10个结果。然后使用该行的linkID,我从info_table中选择该用户的实际信息。只要每个用户只有1个费率,这就很好,很花哨。当用户有2个或更多费率,并且两个费率都是正数时,会发生什么情况?查询选择这两个数据并为两个行中的每一行提取信息,然后显示为两个不同的用户,即使它们相同人。我怎样才能使rate_table查询知道何时有多个费率为相同的linkID并将它们平均,而不是将它们显示为两个不同的人。我正在考虑将每个linkID插入到一个数组中,然后对于随后选择的每一行,检查linkID是否已经在数组中。如果没有,则插入它,如果是,则将它们平均并将其存储在数组中,然后使用该数组填充主页上的表格。我觉得我正在推翻这一点。对不起,如果这有点令人困惑。如果您需要更多信息,请告诉我。PHP MySQL高级过滤

P.S.我还在学习我的MySQL周边查询的方式,所以我很抱歉,如果我要对这个完全错误的方式和你一起度过的最后几分钟试图理解我在说什么:P

P.P.S.我知道我不应该再使用MySQL_Query,而应该做好准备的陈述。我想要掌握MySQL查询,因为这是iOS使用的FMDB数据库,然后我将转向学习准备好的语句。

+1

这可能有助于一点,你在正确的方向[MySQL的聚合函数(http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html)。 'AVG()'可能是你正在寻找的东西。 (一个结果的平均值就是这样的结果,所以应该仍然有效) – Aiias 2013-03-24 03:46:20

+0

这看起来会有所帮助,但查询如何知道运行AVG()函数的哪些行?是否有一个函数可以检测列的重复值? – 2013-03-24 03:52:35

+2

在应该是唯一的列上使用['GROUP BY'](http://dev.mysql.com/doc/refman/5.0/en/select.html)子句。 – Aiias 2013-03-24 03:59:18

回答

0

看看一些MySQL Aggregate Functions的。

AVG()可能是你在找什么。一个结果的平均值就是这个结果,所以应该仍然有效。在列上使用GROUP BY子句应该是唯一的,以便在分组行上运行聚合计算。

+0

最后一个快速问题,因为我使用的是LIMIT 10函数,如果有两行,它会合并这两个,但只显示其他9行。它不再显示满10。我如何强制它再选择一行,如果其中一些被合并? – 2013-03-24 04:10:55

+0

@JoeTorraca - 这不是一个超级简单的计算在MySQL中运行 - 看看关于该主题的这个现有问题:http://stackoverflow.com/questions/2643314/mysql-group-by-limit。 – Aiias 2013-03-24 04:16:25

+0

好的会做,谢谢你的帮助 – 2013-03-24 04:16:40