[MySQL] Hoe records tellen in een andere tabel

Pagina: 1
Acties:

  • Fox_nl
  • Registratie: December 2001
  • Laatst online: 07-12-2021
Heb proberen te zoeken, maar de search doet 't niet volgens mij.

De volgende situatie (versimpelde tabellen)
Tabel T1:
Id (primary key)

Tabel T2
Id (primary key)
T1_Id

Ik wil een overzicht van alle T1 records hebben met daarbij per T1 record hoeveel T2 records daarbijhoren (T2.T1_Id == T1.Id).

Ik heb hiervoor de volgende query gemaakt:
SELECT T1.Id, COUNT(T2.T1_Id) FROM T1, T2 WHERE (T1.Id = T2.T1_Id) GROUP BY T1.Id

Op zich werkt deze, alleen krijg ik GEEN records T1 te zien met 0 records T2.... Hoe krijg ik dit voor elkaar (in 1 query)???????

In twee aparte querys gaat het wel, maar dat is imho minder efficient.

  • momania
  • Registratie: Mei 2000
  • Laatst online: 08:32

momania

iPhone 30! Bam!

Je kan die andere query er met een UNION bij plakken zodat er 1 resultaat, maar ik weet nou niet of dat al in MySQL ondersteund wordt.

Neem je whisky mee, is het te weinig... *zucht*


  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

FROM T1, T2 => FROM T1 LEFT JOIN T2

zou volgens mij moeten werken

Skill is when luck becomes a habit.


  • momania
  • Registratie: Mei 2000
  • Laatst online: 08:32

momania

iPhone 30! Bam!

eek schreef op 01 augustus 2002 @ 13:42:
FROM T1, T2 => FROM T1 LEFT JOIN T2

zou volgens mij moeten werken
Moet je dan niet ook nog een case maken voor de count()?
zoiets als:
code:
1
2
3
4
5
6
7
8
9
10
SELECT
   T1.id   AS ID
   (CASE 
      WHEN T2.T1.id IS NOT NULL
   THEN
      COUNT(T2.T!_id)
   ELSE
      0)      AS  NUM

....

Neem je whisky mee, is het te weinig... *zucht*


  • Fox_nl
  • Registratie: December 2001
  • Laatst online: 07-12-2021
He guys thanks! Ik zal met deze tips eens gaan spelen. Ik heb 't al werkend, gebruik makend van php die eerst de T1 tabellen afgaat een daar iedere keer een query voor de T2 doet. Werkt goed, maar m'n ego is nog niet gestreeld omdat ik 't in 1 query wil doen.

  • Fox_nl
  • Registratie: December 2001
  • Laatst online: 07-12-2021
kheb 'm!

SELECT T1.id, COUNT(T2.T1_id) FROM T1 LEFT JOIN T2 ON T1.id=T2.T1_id GROUP BY T1.id

Doet precies wat ik nodig heb. Wat die JOIN precies doet is me echter niet helemaal duidelijk. Kan iemand mij dat in een paar woorden uitleggen?

  • momania
  • Registratie: Mei 2000
  • Laatst online: 08:32

momania

iPhone 30! Bam!

Die legt de link tussen de 1 op n of 1op <niks> relatie
edit:

met een where clause krijg je dus alleen de 1 op n relaties eruit

Een LEFT JOIN voor de 1 of n en een RIGHT JOIN voor de n op 1 (de andere kant op dus)

Dus je zegt geeft mij een id uit tabel 1 met alle voorkomens (of niks) van die id uit tabel 2

correct me if I'm wrong (maar zoiets was het volgens mij in een nutshell)

Neem je whisky mee, is het te weinig... *zucht*

Pagina: 1