Hej,
Det är så att jag vill räkna ihop antalet poster, som tillhör en viss användare, från 5 olika tabeller.
Något i den här stillen:
Antalet poster från:
Tabell 1: members
Argument: where refer = '800'
+
Tabell 2: book
Argument: where member_id = '800'
+
Tabell 3: bookc
Argument: where p_id = '800'
+
Tabell 4: games
Argument: where p_id = '800'
+
Tabell 5: messages
Argument: where s_id = '800'
+
Till sist vill jag till summan addera ett värde, som hämtas från fältet "logins" i tabellen "members".
Nu är min fråga om det finns något enkelt sätt att direkt vid SQL satsen räkna ihop denna summan?
DISTINCT-count (kräver att det finns en unik nyckel i varje tabell)
select m.logins + count(distinct r.nyckel)+count(distinct b.nyckel)+count(distinct bc.nyckel)+count(distinct g.nyckel)+count(distinct msg.nyckel)
from members m
left outer join members r on m.id=r.refer
left outer join book b on m.id=b.member_id
left outer join bookc bc on m.id=bc.p_id
left outer join games g on m.id=g.p_id
left outer join messages msg on m.id=msg.s_id
Subselect
select m.logins + (select count(*) FROM book WHERE member_id=m.id) + (select count(*) FROM bookc WHERE p_id=m.id) osv...
from members m
Derived table + UNION
select sum(d.countval) from
(
select logins as countval from members where id=800
union
select count(*) FROM book WHERE member_id=800
union
....
)
Du ska inte använda mysql_affected_rows(), inga poster påverkas av en select-fråga. Hämta ut datat på vanligt sätt (det kan alltså vara vettigt att sätta alias på det du ska hämta ut så du har något att referera till i utskriften i php-koden).
En "derived table" är, enkelt uttryckt, det som blir resultatet av din subselect - en "tabell" du kan göra ytterligare utsökningar ifrån.
select sum(d.countval) as summa from
(
select logins as countval from members where id=800
union
select count(*) FROM book WHERE member_id=800
) [b]as d[/b]
255 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25