在mysql数据库中获取前5个最受欢迎的项目?

3

我有一个类似于以下结构的数据库:

user_id    photo_id
1          1
1          2
1          3
1          4
2          5
2          6

我想从it中获取最受欢迎的用户列表。就像这样:
Popular Users: 1 (4) & 2 (2)

我该如何在PHP中使用mysql来执行这个操作?
谢谢,Coulton
附注:我对mysql命令有一定的了解,所以不必过于简化。谢谢!

当然。差不多。这就是我想表达的意思。 - iosfreak
你是如何定义“popular”的? - Pete
@Pete:我认为他指的是提交了最多照片的用户。 - mpen
从他的例子中可以理解马克的意思。 只是没有明确说明,你知道我们假设时会发生什么 =P。 - Pete
2
@phpnerd211:当用户删除照片时,执行-1操作;当添加照片时,执行+1操作。我的建议适用于需要经常获取受欢迎用户并且有大量数据的情况,因为表达式上的计算、分组和排序可能会很慢。 - zerkms
显示剩余2条评论
5个回答

17

基本查询应该是:

select user_id, count(user_id) as cnt
from yourtable
group by user_id
order by cnt desc 
为了显示结果,类似如下代码:
$results = array()
while($row = mysql_fetch_assoc($query_result)) {
   $results[] = "{$row['user_id']} ({$row['cnt']})"
   // repeat for however many results you want
}
echo "Popular user: ", implode(" & ", $results);

5
select user_id, count(user_id) as count from table order by count desc group by user_id

无论如何,类似于这样的东西...


2
这可以仅使用SQL命令来完成。以下是我的做法:
SELECT user_id, count(user_id) uid_count
FROM <<table>>
GROUP BY user_id
ORDER BY uid_count DESC
LIMIT 5;

GROUP BY 收集所有具有相同 user_id 的行,ORDER BY... DESC 按降序对结果进行排序,因此前面的行代表最受欢迎的用户。LIMIT 给出前 5 个结果。


1

数据库查询将类似于以下内容:

select user_id, count(photo_id) as c 
from table group by user_id 
order by c desc limit 5;

在PHP中,它看起来会像这样:
$sql = 'select user_id, count(photo_id) as c from table group by user_id order by c desc limit 5';
$result = mysql_query($sql, $link);

if (!$result) {
    echo "DB Error, could not query the database\n";
    echo 'MySQL Error: ' . mysql_error();
    exit;
}

while ($row = mysql_fetch_assoc($result)) {
    echo $row['user_id'];
    echo $row['c'];
}

0
SELECT COUNT(a.category_id) as cnt,b.category,b.image FROM bookings as a 
INNER JOIN service_category as b ON a.category_id=b.category_id 
GROUP BY a.category_id ORDER BY cnt DESC LIMIT 6

欢迎来到 Stack Overflow!虽然这段代码可能回答了问题,但提供关于为什么和/或如何回答问题的额外上下文可以提高其长期价值。 - Ajean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接