Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Problem z wyświetleniem danych z bazy
Mareczko
post
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 20.11.2009

Ostrzeżenie: (0%)
-----


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;
Go to the top of the page
+Quote Post
bobo1212
post
Post #2





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 5.10.2007

Ostrzeżenie: (0%)
-----


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. }


--------------------
Go to the top of the page
+Quote Post
Daimos
post
Post #3





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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


--------------------
scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
Go to the top of the page
+Quote Post
Mareczko
post
Post #4





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 20.11.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
thek
post
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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ę.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Mareczko
post
Post #6





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 20.11.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 15:23