hi
bastle gerade an einem etwas größeren query und komme nicht mehr wirklich weiter.. es geht um eine seite mit cocktailrezepten
erstmal die tabellenstruktur.. (vereinfacht)
recipes: (die rezepte
name | description | recipe_id
ing2rec: (verbindungstabelle zwischen zutaten und rezepten)
ing_id | recipe_id
ingredients: (tabelle in der die zutaten gespeichert sind)
ing_name | ing_id
comments: (hier sind kommentare zu den einzelnen rezepten gespeichert)
comment | recipe_id | comment_id
so weit, so gut..
bis jetzt hatte ich auf der übersichtsseite über die cocktails den cocktailnamen mit den dazugehörigen zutaten ausgelesen.. hat alles wunderbar funktioniert..
hier der query:
jetzt wollte ich auf der übersichtsseite noch die anzahl der kommentare zum jeweiligen cocktail auslesen lassen.. da bin ich jetzt mit meinem latein am ende..
ich hatte es folgendermaßen versucht:
hier ergaben sich jetzt zwei problem:
wie könnte man das lösen? um die datenbank zu schonen will ich auf keinen fall für jedes ausgelesene rezept nochmals mit einem extra query die anzahl der kommentare auslesen..
danke im vorraus
mfg
whizzler
bastle gerade an einem etwas größeren query und komme nicht mehr wirklich weiter.. es geht um eine seite mit cocktailrezepten
erstmal die tabellenstruktur.. (vereinfacht)
recipes: (die rezepte
name | description | recipe_id
ing2rec: (verbindungstabelle zwischen zutaten und rezepten)
ing_id | recipe_id
ingredients: (tabelle in der die zutaten gespeichert sind)
ing_name | ing_id
comments: (hier sind kommentare zu den einzelnen rezepten gespeichert)
comment | recipe_id | comment_id
so weit, so gut..
bis jetzt hatte ich auf der übersichtsseite über die cocktails den cocktailnamen mit den dazugehörigen zutaten ausgelesen.. hat alles wunderbar funktioniert..
hier der query:
Code:
SELECT r.name, ir.recipe_id,
GROUP_CONCAT( CONCAT_WS( ' ', ir.amount, ir.unit, i.ing_name ) ) AS ings
FROM cf_ing2rec ir
LEFT JOIN cf_recipes r ON ( r.recipe_id = ir.recipe_id )
LEFT JOIN cf_ingredients i ON ( i.ing_id = ir.ing_id )
WHERE r.cat_id = 9
GROUP BY r.recipe_id
ORDER BY r.recipe_id
jetzt wollte ich auf der übersichtsseite noch die anzahl der kommentare zum jeweiligen cocktail auslesen lassen.. da bin ich jetzt mit meinem latein am ende..
ich hatte es folgendermaßen versucht:
Code:
SELECT r.name, ir.recipe_id,
GROUP_CONCAT( CONCAT_WS( ' ', ir.amount, ir.unit, i.ing_name ) ) AS ings,
[b]COUNT( c.comment_id ) AS num_comments[/b]
FROM cf_ing2rec ir
LEFT JOIN cf_recipes r ON ( r.recipe_id = ir.recipe_id )
LEFT JOIN cf_ingredients i ON ( i.ing_id = ir.ing_id )
[b]LEFT JOIN cf_comments c ON ( r.recipe_id = c.recipe_id )[/b]
WHERE r.cat_id =9
GROUP BY r.recipe_id
ORDER BY r.recipe_id
hier ergaben sich jetzt zwei problem:
- wenn zu einem rezept 2 kommentare und 8 zutaten vorhanden sind, dann erzählt mir diese abfrage, dass insgesamt 16 (also pro zutat 2) kommentare vorhanden sind.. das konnte ich noch recht einfach lösen, indem ich durch die anzahl der zutaten teile..
- wenn zwei kommentare vorhanden sind, dann erhalte ich auf diese art und weise jede zutat 2 mal.. und das ist dann doch recht unschön..
wie könnte man das lösen? um die datenbank zu schonen will ich auf keinen fall für jedes ausgelesene rezept nochmals mit einem extra query die anzahl der kommentare auslesen..
danke im vorraus
mfg
whizzler