Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Problem z wyświetleniem danych z bazy
Forum PHP.pl > Forum > Przedszkole
Mareczko
Cześć, mam problem. Próbuje wyświetlić dane z bazy, id i name mają po 1 rekordzie, ale tagi to już rekordy przez co pętla while wykonuje się 2 razy powielając ten sam kod tylko za każdym razem zmieniając wartość tagi. Proszę o pomoc jak to rozwiązać, chce żeby kolejne rekordy z tagi wyświetlały się po przecinku a reszta kodu wykonywała się tylko raz.
Mój kod:
  1. while($row=mysql_fetch_assoc($result)){
  2. $page.='
  3. <p>'.$row['id'].'</p>
  4. <p>'.$row['name'].'</p>
  5. <p>'.$row['tagi'].'</p>
  6. '."\n";
  7. }
  8. print $page;
bobo1212
Witam
Może tak?

  1. while($row=mysql_fetch_assoc($result)){
  2. $page[$row['id']][$row['name']]['tagi'].=$row['tagi'].",";
  3. }
  4. foreach($page as $row_id => $name){
  5. foreach($name as $row_name=> $tagi){
  6. echo '<p>'.$row_id.'</p><p>'.$row_name.'</p><p>'.substr($tagi['tagi'],0,strlen($tagi['tagi'])-1).'.</p>';
  7. }
  8. }
Daimos
masz po prostu bledne zapytanie, nie mozesz pobierac za pomoca inner join tagow i np. newsow, bo co bedzie, jak do jednego rekordu bedziesz mial 100tagow?
proponuje GROUP_CONCAT_WS odszukac w manualu MySql i korzystac z left joina
Mareczko
Szukam już od chwili i nic mi nie idzie, moje zapytanie wygląda tak:
  1. SELECT items.item_id, tag_item.item_id, tags.id, tags.name
  2. LEFT JOIN tag_item ON items.item_id=tag_item.item_id
  3. LEFT JOIN tags ON tags.id=tag_item.tag_id


ale efekt jest taki sam jak wcześniej wstydnis.gif

podbijam
Nikt nie ma pomysłów jak to zrobić ? Może ktoś ma inny pomysł jak te tagi mogę zrobić ?
Teraz moja baza wygląda tak:
  1. --items--
  2. item_id | ...
  3.  
  4. --tag_item--
  5. tag_id | item_id
  6.  
  7. --tags--
  8. id | name


tabela tag_item zawiera powiązania.
thek
Przecież wyraźnie Ci już napisano. Użyj grupowania oraz GROUP_CONCAT jeśli chcesz tylko i wyłącznie wyświetlić te tagi.Jeśli chcesz z nich robić linki czy inne formy, które wymagają większej ilość informacji o tagach to zrezygnuj z łączenia na siłę informacji o przedmiocie i jego tagach byle upchnąć to w jednym zapytaniu. Ludzie zrozumcie, że czasem sens ma użycie 2 lub większej ilości zapytań niż cudowanie z tworzeniem jednej kobyły, która wydajnościowo może być kilka/kilkanaście razy wolniejsza bądź wysyłała będzie mnóstwo niepotrzebnych danych powtarzających się.
Mareczko
Chyba coś Ci się pomyliło, nie próbuje nic na siłę zrobić w 1 zapytaniu. Po prostu nie wiem w ogóle jak to rozwiązać dlatego tu pisze. Mimo wszystko dzięki za pomoc, spróbuję to zrobić na 2 zapytaniach.
Jak ktoś ma jeszcze jakieś pomysły, rozwiązania to będę wdzięczny.
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.