Sie sollten Ihre Abfrage umgestalten. Sie können dies tun, indem Sie die Art und Weise, wie die Abfrage die Daten erfasst, neu anordnen. Wie?
- Wenden Sie zuerst die WHERE-Klausel an
- JOINs zuletzt anwenden
Hier ist Ihre ursprüngliche Abfrage:
SELECT t1.num1,t2.num2,t3.num3
FROM member m
LEFT JOIN
(
SELECT member_id,COUNT(*) as num1
FROM table1
GROUP BY member_id
) t1 ON t1.member_id = m.member_id
LEFT JOIN
(
SELECT member_id,COUNT(*) as num2
FROM table2
GROUP BY member_id
) t2 ON t2.member_id = m.member_id
LEFT JOIN
(
SELECT member_id,COUNT(*) as num3
FROM table3
GROUP BY member_id
) t3 ON t3.member_id = m.member_id
WHERE m.member_id = 27
Hier ist Ihre neue Abfrage
SELECT
IFNULL(t1.num1,0) num1,
IFNULL(t1.num2,0) num2,
IFNULL(t1.num3,0) num3
FROM
(
SELECT * FROM member m
WHERE member_id = 27
)
LEFT JOIN
(
SELECT member_id,COUNT(*) as num1
FROM table1
WHERE member_id = 27
GROUP BY member_id
) t1 ON t1.member_id = m.member_id
LEFT JOIN
(
SELECT member_id,COUNT(*) as num2
FROM table2
WHERE member_id = 27
GROUP BY member_id
) t2 ON t2.member_id = m.member_id
LEFT JOIN
(
SELECT member_id,COUNT(*) as num3
FROM table3
WHERE member_id = 27
GROUP BY member_id
) t3 ON t3.member_id = m.member_id
;
Übrigens habe ich member m
geändert in SELECT * FROM member m WHERE member_id = 27
falls Sie Informationen über Mitglied 27 benötigen. Ich habe auch den IFNULL
hinzugefügt Funktion für jedes Ergebnis, um 0 zu erzeugen, falls count NULL ist.
Sie müssen sich absolut vergewissern
- member_id ist der Primärschlüssel der Member-Tabelle
- member_id ist in Tabelle1, Tabelle2 und Tabelle3 indiziert
Probieren Sie es aus !!!