COUNT in mehreren Tabellen in MySQL
small-step
- datenbank
0 romy0 small-step0 romy0 small-step0 Oesi50
Hi,
ich habe folgendes Problem:
ich möchte in mehreren Tabellen einen COUNT durchführen. Mit getrennten Abfragen klappt das auch gut, allerdings ist das wirklich ziemlich langsam (ich muss recht viele Abfragen in einer Schleife durchführen). Deswegen wollte ich das Zählen der Einträge auf eine Abfrage einschränken. Ich komme allerdings nicht wirklich weiter.
Also:
2 Tabellen, nennen wir sie der Einfachheit halber tabelle1 und tabelle2.
Aus tabelle1 benötige ich die Anzahl der Einträge bei denen die reporter_id = '$reporter_id' ist.
Aus tabelle2 benötige ich die Anzahl der Einträge bei denen die reporter_id = '$reporter_id' ist und bei denen active = '1' ist.
Versucht habe ich verschiedene Dinge, funktioniert hat bisher nichts.
SELECT
COUNT(t1.id)
AS 'count1',
COUNT(t2.id)
AS 'count2'
FROM
tabelle1 AS t1,
tabelle2 as t2
WHERE
t1.reporter_id = '".$reporter_id."' OR
t2.reporter_id = '".$reporter_id."' AND
t2.active = '1'
oder
SELECT
COUNT(t1.id)
FROM tabelle1 AS t1
LEFT JOIN tabelle2 AS t2
ON t1.reporter_id = '".$reporter_id."'
WHERE t2.reporter_id = '".$reporter_id."' AND
t2.active = '1'
Aber ich schätze ich hab da was ziemlich falsch verstanden, hm?
Kann mir jemand auf den rechten Weg helfen?
Vielen Dank schonmal,
small-step
Hi smallstep ,
SELECT
COUNT(t1.id)
FROM tabelle1 AS t1
LEFT JOIN tabelle2 AS t2
ON t1.reporter_id = '".$reporter_id."'
WHERE t2.reporter_id = '".$reporter_id."' AND
t2.active = '1'
sind t1.reporter_id und t2.reporter_id identisch?
dann hilft bestimmt:
SELECT
COUNT(t1.id)
FROM tabelle1 AS t1
LEFT JOIN tabelle2 AS t2
ON t1.reporter_id = t2.reporter_id
WHERE t2.active = '1'
ansonsten poste mal die Struktur der Tabellen, wie sie verbunden sind, was Du als Ergebnis erzielen willst und was bei den Versuchen für Ergebnisse rauskommen.
ciao
romy
Hi romy,
sind t1.reporter_id und t2.reporter_id identisch?
Ja, sind sie. Allerdings sind dort viele verschiedene Nutzer vorhanden, deswegen muss ich noch nach der reporter_id selbst suchen.
dann hilft bestimmt:
SELECT
COUNT(t1.id)
FROM tabelle1 AS t1
LEFT JOIN tabelle2 AS t2
ON t1.reporter_id = t2.reporter_id
WHERE t2.active = '1'
ansonsten poste mal die Struktur der Tabellen, wie sie verbunden sind, was Du als Ergebnis erzielen willst und was bei den Versuchen für Ergebnisse rauskommen.
Die Struktur wäre ein wenig viel, die beiden Tabellen umfassen jeweils ca. 15 spalten. Egal, hier ein Beispiel:
tabelle1
-----------------------------
| id | reporter_id | inhalt |
|---------------------------|
| 1 | 12 | test1 |
| 2 | 12 | test2 |
| 3 | 7 | test3 |
-----------------------------
tabelle2
--------------------------------------
| id | reporter_id | active | inhalt |
|------------------------------------|
| 1 | 12 | 1 | test1 |
| 2 | 12 | 0 | test2 |
| 3 | 7 | 0 | test3 |
--------------------------------------
So, jetzt möchte ich die Anzahl der Einträge von reporter 12 aus tabelle1 haben. Das wären 2. Plus die Anzahl der Einträge aus tabelle2 bei denen der reporter ebenfalls 12 ist und active 1 ist, das wäre 1 Eintrag.
Zusammenzählen kann ich das auch später, mir geht es erstmal um die jeweilige Anzahl.
Gruß,
small-step
Hi small-step,
tabelle1
| id | reporter_id | inhalt |
|---------------------------|
| 1 | 12 | test1 |
| 2 | 12 | test2 |
| 3 | 7 | test3 |tabelle2
| id | reporter_id | active | inhalt |
|------------------------------------|
| 1 | 12 | 1 | test1 |
| 2 | 12 | 0 | test2 |
| 3 | 7 | 0 | test3 |
$ID sei 12
SELECT
COUNT(*)
FROM tabelle1 AS t1
INNER JOIN tabelle2 AS t2
ON t1.reporter_id = t2.reporter_id
WHERE t2.active = '1' AND t1.reporter_id = {$ID}
sollte 3 liefern.
idt active ein char-Feld? Ansonsten t2.active=1
Kann leider nicht testen. Gehts ?
ciao
romy
Hi romy,
SELECT
COUNT(*)
FROM tabelle1 AS t1
INNER JOIN tabelle2 AS t2
ON t1.reporter_id = t2.reporter_id
WHERE t2.active = '1' AND t1.reporter_id = {$ID}sollte 3 liefern.
idt active ein char-Feld? Ansonsten t2.active=1
ID ist eigentlich nur ein Dummy, ist ein varchar.
Kann leider nicht testen. Gehts ?
Seltsamerweise das selbe Problem das ich schon einmal hatte. Statt 1 bekomme ich 0, statt 4 bekomme ich 3 ausgegeben. 0 bleibt 0.
Versteh ich nicht.
Grüße,
small-step