Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak uniknąć zapytania w pętli?
Forum PHP.pl > Forum > PHP
tehaha
Witam,
z bazy pobieram listę artykułów, obok każdego artykułu będzie jego średnia ocena(wszystkie oceny dla artykuły/ ilość ocen), oceny oczywiście są w oddzielnej tabeli. Najprostszym rozwiązaniem było stworzenie zapytania w pętli czyli dla każdego pobranego artykuły dać oddzielne zapytanie na wyliczenie tej średniej oceny, ale w takim przypadku dla listy 100 artykułów strona wyśle ponad 100 zapytań.....

Ma ktoś pomysł jak się do tego zabrać? nie proszę o gotowca tylko o jakieś wskazówki

Pozdrawiam i dziękuję za ewentualną pomoc:)
erix
A JOIN Ci nie wystarczy?
tehaha
no a mogę zrobić takiego joina żeby dla każdego rekordu z jednej tabeli pobrać sumę i liczbę rekordów z drugiej tabeli przypisaną do rekordu z pierwszej tabeli?
marcio
Cytat(tehaha @ 11.03.2010, 20:58:04 ) *
no a mogę zrobić takiego joina żeby dla każdego rekordu z jednej tabeli pobrać sumę i liczbę rekordów z drugiej tabeli przypisaną do rekordu z pierwszej tabeli?

Jesli sa jakiekolwiek relacje np poprzed ID art'a to tak.
Zreszta pokaz jak wygladaja tabele bo nikt zgadywac nie bedzie i kod ktory do tej pory masz.
tehaha
pytałem tylko o takie teoretyczne podejście do sprawy ale ok. kod jakim pobieram dane do utworzenia listy:
  1. $sql = sprintf("SELECT a.game_id, a.game_title, b.game_desc, b.game_platform, b.game_premier, b.game_premier_pl,c.image_id, d.producer_label, e.platform_label FROM admin_games a JOIN admin_game_details b ON a.game_id = b.game_id $platform_sort LEFT JOIN admin_game_covers c ON a.game_id = c.game_id AND c.image_platform = b.game_platform LEFT JOIN admin_producers d ON a.game_producer = d.producer_id LEFT JOIN admin_platforms e ON b.game_platform = e.platform_id $where $filter $order $order_dir LIMIT %s, %s",
  2. mysql_real_escape_string($limit_start),
  3. );


następnie w pętli takim kodem pobieram średnią ocenę dla każdej gry :
  1. $sql_ra = sprintf("SELECT sum(a.material_game_rank) as rank_sum, count(a.material_game_rank) as rank_count FROM admin_materials a JOIN admin_material_game_assoc b ON a.material_id = b.material_id AND b.game_id = '%s' WHERE a.material_platform = '%s' AND a.material_type = '2'", mysql_real_escape_string($game_id), mysql_real_escape_string($platform_id));


więc w rezultacie chodziło by o scalenie tych 2 zapytań w jedno
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.