Aufbau: Code:
t1 products:
id, name, pri, usw
1, beispiel1, x.xx
2, beispiel1, x.xx
3, beispiel1, x.xx
4, beispiel1, x.xx
t2 pr_calc:
id, pid, name
1, 2, test1, x.xx
2, 2, test2, x.xx
3, 2, test3, x.xx
4, 4, dieses, x.xx
5, 4, jenes, x.xx
6, 4, sonstiges, x.xx
7, 4, alles, x.xx
Statement: Code:
SELECT
products.id,
products.name,
products.pri,
COUNT(pr_calc.pid) AS prc_anz,
pr_calc.id AS prc_id,
pr_calc.name AS prc_name,
pr_calc.pri AS prc_pri
FROM
products
LEFT OUTER JOIN
pr_calc ON pr_calc.pid = products.id
GROUP BY
products.id,
pr_calc.id
ORDER BY
products.id ASC
Ausgabe: Code:
Array
(
[id] => 1
[name] => Beispiel1
[pri] => 149.00
[prc_anz] => 0
[prc_id] =>
[prc_name] =>
[prc_pri] =>
)
Array
(
[id] => 2
[name] => Beispiel2
[pri] => 99.00
[prc_anz] => 1
[prc_id] => 1
[prc_name] => test1
[prc_pri] => 4.99
)
Array
(
[id] => 2
[name] => Beispiel2
[pri] => 99.00
[prc_anz] => 1
[prc_id] => 2
[prc_name] => test2
[prc_pri] => 5.99
)
usw.
Lediglich der Syntax für COUNT() gelingt mir nicht. Hier soll "prc_anz" für "pid 2 (t2)" 3 ergeben und bei "pid 4 (t2)" dementsprechend 4. Ohne GROUB BY => pr_calc.id klappt das selbstverständlich super, nur haut dann die Ergebnistabelle von pr_calc nicht hin. Und mittels SUBSelect bekomme ich es auch nicht zum laufen. Vielen Dank im Voraus!
MfG
--------------------------
€dit: 1:02 Uhr Habe die Lösung: Code:
SELECT
products.id,
products.name,
products.pri,
COUNT(pr_calc.id) AS prc_anz,
GROUP_CONCAT(pr_calc.id SEPARATOR ', ') AS prc_id,
GROUP_CONCAT(pr_calc.name SEPARATOR ', ') AS prc_name,
GROUP_CONCAT(pr_calc.pri SEPARATOR ', ') AS prc_pri
FROM
products
LEFT JOIN
pr_calc ON pr_calc.pid = products.id
GROUP BY
products.id, pr_calc.pid
ORDER BY
products.id ASC
Schöner Nebeneffekt, die Arrayausgabe ist nun auch effizienter.