Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [HTML][MySQL][PHP]tabela w php, jeden do wielu? jak?
sindbad_zeglarz
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 18.04.2012

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


Hejka
Mam w bazie 3 tabele.
1 tabela - posiadłosci
2 tabela - dane userow
3 tabela - zlaczone id z tabela1 z id_tabela2 (jeden do wielu).

Chcialbym wyswietlić raporcik taki, aby w wyniku był następujący efekt.

Id tabela1 | id tabela 2 | imie tab2 | nazwisko tab 2
1 1 G P
tutaj nie chcę powtarzać tego samego id drugi raz tylko dać inne dane dane z id_tabeli2 , imie i nazwisko.


Przykład: DOM może mieć kilku właścicieli.
Ale jest to jeden DOM = jeden ID a kilka ID wlascicieli.

W SQL-u jakoś nie widzę żeby się to dało zrobić łatwo, chyba że ktoś coś podpowie.
A PHP jak to wyświetlić ?

Podpowiedzcie coś proszę.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
sindbad_zeglarz
post
Post #2





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 18.04.2012

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


Zrobiłem tak dzieka za pomocną dłoń. Doczytałem o joinach, i zaczałem je kumać.

  1. SELECT * FROM dom d
  2. LEFT JOIN tab3 wmd ON wmd.id = d.id
  3. LEFT JOIN wlasciciel w ON wmd.id_wlasciciel = w.id


no i ładnie wyświetla ale oczywiscie powtarza id domu wszedzie tam gdzie jest wlasciciel (wlasciciel moze miec kilka domow).

zastosowanie skryptu kolegi NOSPOR fajnie by rozwiazało sprawę, ktos podpowie:
Jak to zastosować dla mojego przykładu ?

  1. <?php
  2. mysql_connect('localhost','root','') or die(mysql_error());
  3.  
  4. //pobranie wszystkich danych i ich pogrupowanie
  5. $sql = 'SELECT * FROM tabela1 dom
  6. LEFT JOIN tabela3 wmd ON wmd.dom_id = dom.id
  7. LEFT JOIN tabela2 w ON wmd.wlasciciel_id = w.id '; //sortujemy po nazwie kategorii
  8.  
  9. $res = mysql_query($sql) or die(mysql_error());
  10.  
  11. //najpierw pozyskamy niezbędne dane
  12. $wlasciciele = array();
  13. while ($row = mysql_fetch_array($res)){
  14. $cid = $row['id'];
  15.  
  16. //jeśli nie było jeszcze danego wlasciciela to go tworzymy
  17. if (!isset($wlasciciele[$cid]))
  18. $wlasciciele[$cid] = array('name' => $row['nazwisko'], 'wlasciciele' => array());
  19.  
  20. //dodajemy do kategorii kolejne produkty
  21. if (!empty($row['nazwisko'])) //jeśli istnieje produkt
  22. $wlasciciele[$cid]['wlasciciele'][] = array('name' => $row['nazwisko'], 'id'=>$row['id']);
  23. }
  24. print_r($wlasciciele); //do obejrzenia jak wygląda wygenerowana tablica
  25.  
  26. //a teraz wygenerujemy stronę na podstawie uzyskanych danych
  27. echo '<ul>';
  28. foreach ($wlasciciele as $idCat => $category){ //petla, która leci po kategoriach
  29. echo '<li>'.$category['name'].' (liczba wlasciciele: '.count($category['wlasciciele']).')<ul>';
  30. foreach ($category['wlasciciele'] as $nazwisko){ //pętla, która leci po produktach w kategorii
  31. echo '<li>wlasciciel o nazwie <b>'.$nazwisko['name'].'</b> i id <b>'.$nazwisko['id'].'</b></li>';
  32. }
  33. echo '</ul></li>';
  34. }
  35. echo '</ul>';


i jest problem,bo wyświetla
  1. wlasciciel o nazwie nowakowska i id 1
  2. wlasciciel o nazwie nowakowska i id 1
  3. wlasciciel o nazwie nowakowska i id 1
  4. wlasciciel o nazwie nowakowska i id 1
  5. wlasciciel o nazwie taranowska i id 1


już coś lepiej. ale zapętliłem się i nie wiem jak to ugryźć.
Coś nospor poradzisz ?


Ten post edytował sindbad_zeglarz 28.06.2012, 11:20:35
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 10.10.2025 - 20:48