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;
im trying to get all users and the counts of visits they did.
the result i get is all users but the count column contain same value (not specific to that row id).
what am i doing wrong here ? how to tell mysql to user this row id ?
is compound select optimum way to do it or is there a better way ?
SELECT p.id, p.name, COUNT(v.user_id)
FROM personal p
LEFT JOIN
visit v
ON v.user_id = p.id
GROUP BY
p.id
You may also use subselect of course (for instance if you have ANSI
GROUP BY
compatibility on):
SELECT p.id, p.name,
(
SELECT COUNT(*)
FROM visit v
WHERE v.user_id = p.id
)
FROM personal p
try this
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
Try this:
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;
That will work with LEFT JOIN
tables personal
with visit
.
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
If you want only user which are having atleast visit count 1, do RIGHT JOIN
OR HAVING
in Group By
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
OR
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.