webForumDet fria alternativet

Räkna från tre olika tabeller

Databaser & SQL

5 svar · 261 visningar · startad av Qimen

Medlem sedan juni 20015 009 inlägg
Frågan#1

Hej,

Har försökt men får inte rätt på min sql-fråga. Det jag vill göra är:

1. Räkna antal poster i pw_users.
2. Räkna antal poster i pw_users som har system_access = 256.
3. Räkna antal poster i pw_ticket (här problemmet kommer in).

SELECT COUNT(*) AS medlemmar,
sum(case when system_access = 256 then 1 else 0 end) AS vip,
FROM pw_users

Så långt fungerar det bra men att lägga till den 3:e saken vill sig inte. DBMS är MySQL 4.0 så subqueries går inte. Det kanske inte gå att uföra då? :)
Hade varit trevligt om det gått att göra något i stil med detta:

SELECT COUNT(*) AS medlemmar,
sum(case when system_access = 256 then 1 else 0 end) AS vip,
sum() AS t.vip,
FROM pw_users, t AS pw_ticket

Men det vill sig inte.

Medlem sedan dec. 200012 464 inlägg
#2
SELECT COUNT(*) AS medlemmar,
sum(case when system_access = 256 then 1 else 0 end) AS vip
FROM pw_users
union all
select count(*) , -1
from pw_ticket
Medlem sedan juni 20015 009 inlägg
#3

Tack! :)

Medlem sedan juni 20015 009 inlägg
#4

Satt och testa lite själv. Är där någon prestandaförlust eller något annat negativt om man kör såhär:

SELECT 'medlemmar' AS typ, COUNT(*) AS varde
FROM pw_users
union all
SELECT 'vip', count(*)
FROM pw_users WHERE system_access = 256
union all
SELECT 'online', count(*)
FROM pw_ticket

Ger samma resultat. :)

Medlem sedan dec. 200012 464 inlägg
#5

Det ger sämre prestanda eftersom du kommer att söka igenom pw_users två gånger. Om du har ett index på system_access eller om du inte har så många poster i tabellen så borde det inte ha någon betydelse.

Rent estetiskt så föredrar jag din lösning.

Medlem sedan juni 20015 009 inlägg
#6

Okej, där ser man. Då kör jag på ditt förslag. :)

288 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
156 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)