mysql显示每行中其他表的行数

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

我正在努力获取所有用户以及他们的访问次数

我得到的结果是除了count列之外的所有用户都包含相同的值(不特定于该行id)

我做错了什么?如何告诉mysql使用此行id

复合选择是最好的方法还是有更好的方法

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;