如何从多个表有效地访问用户数据

时间:2012-06-29 19:38:15

标签: php mysql sql

许多论坛和网站在帖子或表格中显示用户信息(当您查看超过1个用户时)

例如,您可能有一个论坛帖子,其上的每个帖子都会显示有关海报的信息,如下所示:

姓名:约翰 电子邮件:email@email.com 帖子:450

他们可能有一个用户表,其中存储了姓名和电子邮件,然后是一个表格。

在一个sql语句中我能想到的唯一想法就是每次用户发布时在用户表中添加1到一行(对应于发布用户的那一行),这似乎是一个对我不好的解决方案。

他们如何计算每个用户的帖子数量?

2 个答案:

答案 0 :(得分:3)

他们使用SQL COUNT()函数动态生成计数:

SELECT COUNT( *) FROM posts WHERE user_id = 1

这将计算posts表中由符合条件user_id = 1的用户编写的行数。

要在一个查询中执行此操作,您可以使用JOIN和GROUP BY标识符,如下所示:

SELECT username, user_email, COUNT( p.post_id) as num_posts
    FROM users u
    LEFT JOIN posts p
    ON p.user_id = u.user_id
WHERE u.user_id = 1
GROUP BY u.user_id

答案 1 :(得分:1)

假设电子邮件在用户表中是唯一的,您可以执行以下操作:

SELECT u.name, u.email, count(*) 
FROM users u, posts p
WHERE u.user_id = p.user_id
GROUP BY u.email;