Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: select z dwóch table
Forum PHP.pl > Forum > Bazy danych > MySQL
peklo
witam
Mam taki delikatny problem z selectem do dwóch tabel.
W skrócie chodzi o to że id z pierwszej tabeli może być połączone z wieloma id z drugiej tabeli.
Otóż mam dwie tabela.
Tabele ogloszenia w której mam pola id,nazwa oraz drugą tabelę kategorie w której mam pola id_ogloszenia,pj.
Teraz tabela ogloszenia a konkretniej pole id może ale nie musi być powiązana z tabelą kategorie z polem id_ogloszenia czyli mogę mieć takie warunki:
Przykład 1
Tabela ogloszenia ma id 1 , i nazwę aaaa
Tabela kategorie nie ma przypisanego id_ogloszenia o wartości 1

Przykład 2
Tabela ogłoszenia ma id 2, i nazwę bbbbbb
Tabela kategorie ma trzy id_ogloszenia 2,2,2 oraz ma jakieś tam nazwy pj.

Jakim zapytaniem teraz powiązać te dwie tabele. chciałbym żeby w rekordzie pojawiła się jedna wartość z tabeli ogłoszenia i podpięły się wartości id_kategorii z tabeli kategorie.
Próbuje z left outer join, z group i nic mi nie wychodzi.

  1. $sql = 'SELECT * from ogloszenia o LEFT OUTER JOIN kategorie k on o.id=k.id_ogloszenia WHERE o.id=36;


Dla przykładu dałem id=36-przy takim zapytaniu pokazuje wszystkie id_ogloszenia z tabeli kategorie ale w wielu rekordach:(
ghost1511
Zwykły LEFT JOIN lub INNER JOIN jeżeli chcesz wyeliminować ogłoszenia bez kategorii.
nospor
Cytat
Dla przykładu dałem id=36-przy takim zapytaniu pokazuje wszystkie id_ogloszenia z tabeli kategorie ale w wielu rekordach:(
Zgadza się. Tak działa pobieranie danych. Musisz teraz w php te dane pogrupować tak jak chcesz. Prosze, tu o tym pisalem:
http://nospor.pl/grupowanie-wynikow.html
peklo
nospor pomocy robiłem wg twojego schematu ale coś namieszałem i rzeczywiście mam pogrupowane jako jeden wynik kategorie prawa jazdy czyli kat a, kat b itd ale za to mam zdublowane rekordy nazwa,id itd. Czyli jeśli mam 3 rodzaje prawa jazdy to mam:
nazwa,id,miasto
nazwa,id,miasto
nazwa,id,miasto
i pod spodem kat a, kat b, kat ,c

A ma być:
nazwa,id,miasto
kat a, kat b, kat c

ach i jeszczo jedno pytanie co zrobić jak będe musiał do tego podpiąć jeszcze jedną tabele np zdjecia gdzie będzie podpinana tak samo po ogloszenia.id=zdjecia.id?

  1. <?php
  2. include('../config.php');
  3.  
  4. try
  5. {
  6. $con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
  7. $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
  8. $sql = 'SELECT * from ogloszenia o LEFT JOIN pj p on o.id=p.id_ogloszenia WHERE o.id=36';
  9. $stmt = $con->prepare( $sql );
  10. $stmt -> bindValue(':id', $id, PDO::PARAM_INT);
  11. $stmt -> execute();
  12. $ogloszenia = array();
  13.  
  14. while($row = $stmt -> fetch())
  15.  
  16. {
  17. if (!empty($row['id_prawo_jazdy'])
  18. $ogloszenia[$id]['pj'][] = array('id_prawo_jazdy' => $row['id_prawo_jazdy']);
  19.  
  20. echo $row['nazwa_ogloszenia'];echo"<br>";
  21. echo $row['id'];echo"<br>";
  22. echo $row['miasto'];echo"<br>";
  23. //itd wszystko jest w tabeli ale tu jej nie wklejałem
  24. }
  25.  
  26.  
  27. foreach ($ogloszenia as $id => $ogloszenia){
  28. foreach ($ogloszenia['pj'] as $pj){
  29. echo '<b>kat.</b>'.$pj['id_prawo_jazdy'].'&nbsp;</b></li>';
  30.  
  31.  
  32. }
  33.  
  34. }
  35.  
  36. $stmt -> closeCursor();
  37. }
  38. catch(PDOException $e)
  39. {
  40. echo 'Wystapił błąd.';
  41. }
  42.  
  43. ?>
nospor
W arcie masz wyraznie napisane, ze najpierw masz przygotowac pogrupowaną tablice, a dopiero potem zająć sie jej wyswietlaniem. A ty wszystko to robisz za jednym zamachem...
peklo
ok coś mi tam wyszło
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.