mysql显示每行中其他表的行数
我正在努力获取所有用户以及他们的访问次数 我得到的结果是除了count列之外的所有用户都包含相同的值(不特定于该行id) 我做错了什么?如何告诉mysql使用此行id 复合选择是最好的方法还是有更好的方法mysql显示每行中其他表的行数,mysql,select,count,Mysql,Select,Count,我正在努力获取所有用户以及他们的访问次数 我得到的结果是除了count列之外的所有用户都包含相同的值(不特定于该行id) 我做错了什么?如何告诉mysql使用此行id 复合选择是最好的方法还是有更好的方法 select `personal`.`id` AS `id`, `personal`.`name` AS `name`, (select count(visit.id) from visit,personal where visit.user_id=person
select `personal`.`id` AS `id`,
`personal`.`name` AS `name`,
(select count(visit.id)
from visit,personal
where visit.user_id=personal.id) as count
from personal;
当然,您也可以使用subselect(例如,如果您有ANSI
GROUP BY
compatibility on):
试试这个
SELECT p.id, p.name,
(
SELECT COUNT(*)
FROM visit v
WHERE v.user_id = p.id
)
FROM personal p
这将适用于
左连接
表个人
和访问
SELECT
Pe.id AS id,Pe.name AS name,COUNT(v.user_id) number_visit
FROM personal Pe
LEFT JOIN visit Vi
ON Vi.user_id= Pe.id
GROUP BY Pe.id
如果您只想要访问次数至少为1的用户,请在分组方式中进行右加入
或拥有
SELECT
Pe.id AS id, Pe.name AS name, COUNT(v.user_id) number_visit
FROM
personal Pe
LEFT JOIN
visit Vi ON Vi.user_id = Pe.id
GROUP BY Pe.id
或
SELECT
Pe.id AS id, Pe.name AS name, COUNT(v.user_id) number_visit
FROM
personal Pe
RIGHT JOIN
visit Vi ON Vi.user_id = Pe.id
GROUP BY Pe.id
试试这个:
SELECT
Pe.id AS id, Pe.name AS name, COUNT(v.user_id) number_visit
FROM
personal Pe
LEFT JOIN
visit Vi ON Vi.user_id = Pe.id
GROUP BY Pe.id HAVING number_visit > 1
这将不会返回零访问量的用户。@对不起,现在应该修复它。谢谢。请尝试下面的答案,这是所有可能的答案,但如果我没有错的话……第二个查询还需要分组方式。否则,它将从第一个表中给出多条记录。@Dharmespatel:两个查询将返回相同的结果集。
SELECT
Pe.id AS id, Pe.name AS name, COUNT(v.user_id) number_visit
FROM
personal Pe
LEFT JOIN
visit Vi ON Vi.user_id = Pe.id
GROUP BY Pe.id HAVING number_visit > 1
select
p.id AS `id`,
p.name AS `name`,
IFNULL(v.TheCount, 0) TheCount
from personal p
LEFT JOIN
(
SELECT user_id, COUNT(*) TheCount
FROM visits v
GROUP BY user_id
) v ON v.user_id = p.Id;