Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Odczyt danych z bazy., Odczyt danych z 2 powiązanych ze sobą tabel.
AniaR
post
Post #1





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 6.05.2009
Skąd: warszawa

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


Witam,

Majac 2 tebele w bazie:

Kategorie (id, nazwa)
Zdjecia (id, id_kategorii, sciezka)

Chcialabym odczytac dane z tabel by wyswietlaly sie nastepujaco:

JAKAS NAZWA KATEGORII 1
zdjecie1
zdjecie2
..
zdjecieN

JAKAS NAZWA KATEGORII 2
zdjecie1
zdjecie2
..
zdjecieN


......

JAKAS NAZWA KATEGORII N
zdjecie1
zdjecie2
..
zdjecieN



Zrobilam to w ten sposob ze najpierw wyswietlam nazwy wsyztskich kategorii:
JAKAS NAZWA KATEGORII 1
JAKAS NAZWA KATEGORII 2
...
JAKAS NAZWA KATEGORII N

a po nacisnieciu na ktoras z nazw, w adescie url przekazuje zmienna z id tej kategorii i nastepnie pobieram z bazy zdjecia ktore spelniaja warunek: id_kategorii = $id
W ten sposob wyswietlam zdjecia z danej kategorii. Jednak wyswietlam wtedy tylko jedna grupe zdjec z jednej kategorii.

Jednaj mi zalezy by wyswietlic na raz wszytskie zdjecia ktore sa w bazie posegregowane kategoriami, a dodatkowo nad kazda z grup zdjec nazwe kategori do ktorej nalezą.
Czy ktos moze dac mi wskazowke jak ulozyc pytanie badz pytania by wyswietlic dane w taki sposob jaki potrzebuje??
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
kirex
post
Post #2





Grupa: Zarejestrowani
Postów: 16
Pomógł: 4
Dołączył: 3.03.2008

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


Możesz zrobić to na 2 sposoby, wyciągając najpierw kategorie i później do nich zdjęcia:

  1. <?php
  2. $kategorieSql = mysql_query('select * from Kategorie order by nazwa asc');
  3.  
  4. while($kategoria = mysql_fetch_assoc($kategorieSql)) {
  5.  
  6.   echo $kategoria['nazwa'] . '<br>';
  7.  
  8.   $zdjeciaSql = mysql_query('select * from Zdjecia where id_kategorii = ' . $kategoria['id']);
  9.   while($zdjecie = mysql_fetch_assoc($zdjeciaSql)) {
  10.      echo $zdjecie['sciezka'] . '<br>';
  11.   }
  12.  
  13. }
  14. ?>


lub ciągnąć wszystko razem i w php sobie rozbić

  1. <?php
  2. $kategorieZdjeciaSql = mysql_query('select k.nazwa, z.* from Kategorie k inner join Zdjecia z on k.id = z.id_kategorii order by k.nazwa asc');
  3.  
  4. $kategoria = null;
  5.  
  6.  while($kategorieZdjecia = mysql_fetch_assoc($kategorieZdjeciaSql )) {
  7.  
  8.   if($kategoria != $kategorieZdjecia['nazwa']) {
  9.      $kategoria = $kategorieZdjecia['nazwa'];
  10.      echo $kategorieZdjecia['nazwa'] . '<br>';
  11.   }
  12.  
  13.   echo $kategorieZdjecia['sciezka'] . '<br>';
  14.  }
  15. ?>


jedno i drugie powinno działać poprawnie, chociaż lepszym wyjściem jest 2 opcja ponieważ ma tylko jedno zapytanie do bazy
Go to the top of the page
+Quote Post
AniaR
post
Post #3





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 6.05.2009
Skąd: warszawa

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


Dziekuje bardzo:) Zaraz bede probowala:)
Go to the top of the page
+Quote Post
sowiq
post
Post #4





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


@kirex,
jeśli już chcesz pomagać, to rób to dobrze.

1. Twój pierwszy sposób pokazuje jedną z gorszych praktyk, jakie można stosować przy zabawie z SQL. Uzależniasz ilość zapytań od ilości rekordów w bazie. Jeśli w tabelce 'Kategoria' będziesz miał 1k rekordów, to 'Zdjęcia' wykonasz 1k zapytań. Jeśli będzie tam 100k rekordów, to liczba zapytań będzie odpowiednio większa. Oczywiście w tym przypadku zapewne nie będzie takiej ilości danych, ale trzeba się wystrzegać powielania złych nawyków.

2. Ten sposób jest już o wiele lepszy, ale też nie do końca poprawny. Dużo lepszym pomysłem jest zastosowanie JOIN'ów - wykonują się one szybciej niż iloczyny kartezjańskie, które zastosowałeś.
Przepraszam, źle przeczytałem.

Ten post edytował sowiq 6.05.2009, 11:38:22
Go to the top of the page
+Quote Post
kirex
post
Post #5





Grupa: Zarejestrowani
Postów: 16
Pomógł: 4
Dołączył: 3.03.2008

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


@sowiq,

Potrafisz czytać ze zrozumieniem ? Napisałem na końcu, że drugie rozwiązanie jest lepsze. Co do join, to niby co jest w 2 zapytaniu ?
Go to the top of the page
+Quote Post
sowiq
post
Post #6





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Przepraszam, źle przeczytałem 2. sposób.
Go to the top of the page
+Quote Post
AniaR
post
Post #7





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 6.05.2009
Skąd: warszawa

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


A jak zmodyfikowac ten kod:

<?php
$kategorieZdjeciaSql = mysql_query('select k.nazwa, z.* from Kategorie k inner join Zdjecia z on k.id = z.id_kategorii order by k.nazwa asc');

$kategoria = null;

while($kategorieZdjecia = mysql_fetch_assoc($kategorieZdjeciaSql )) {

if($kategoria != $kategorieZdjecia['nazwa']) {
$kategoria = $kategorieZdjecia['nazwa'];
echo $kategorieZdjecia['nazwa'] . '<br>';
}

echo $kategorieZdjecia['sciezka'] . '<br>';
}
?>

Aby rowniez wyswietlalo nazwy kategorii do ktorych nie sa dodane zadne zdjecia?

A jak zmodyfikowac ten kod:

<?php
$kategorieZdjeciaSql = mysql_query('select k.nazwa, z.* from Kategorie k inner join Zdjecia z on k.id = z.id_kategorii order by k.nazwa asc');

$kategoria = null;

while($kategorieZdjecia = mysql_fetch_assoc($kategorieZdjeciaSql )) {

if($kategoria != $kategorieZdjecia['nazwa']) {
$kategoria = $kategorieZdjecia['nazwa'];
echo $kategorieZdjecia['nazwa'] . '<br>';
}

echo $kategorieZdjecia['sciezka'] . '<br>';
}
?>

Aby rowniez wyswietlalo nazwy kategorii do ktorych nie sa dodane zadne zdjecia?

Ten post edytował AniaR 6.05.2009, 12:17:17
Go to the top of the page
+Quote Post
kirex
post
Post #8





Grupa: Zarejestrowani
Postów: 16
Pomógł: 4
Dołączył: 3.03.2008

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


tak ?:

  1. <?php
  2. $kategorieZdjeciaSql = mysql_query('select k.nazwa, z.* from Kategorie k left join Zdjecia z on k.id = z.id_kategorii order by k.nazwa asc');
  3.  
  4. $kategoria = null;
  5.  
  6. while($kategorieZdjecia = mysql_fetch_assoc($kategorieZdjeciaSql )) {
  7.  
  8.    if($kategoria != $kategorieZdjecia['nazwa']) {
  9.        $kategoria = $kategorieZdjecia['nazwa'];
  10.        echo $kategorieZdjecia['nazwa'] . '<br>';
  11.    }
  12.  
  13.    if(!empty($kategorieZdjecia['sciezka')) {
  14.        echo $kategorieZdjecia['sciezka'] . '<br>';
  15.    }
  16. }
  17. ?>


Ten post edytował kirex 6.05.2009, 12:55:31
Go to the top of the page
+Quote Post
AniaR
post
Post #9





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 6.05.2009
Skąd: warszawa

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


Dolklanie tak (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) jestes THE BEST (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif)
Go to the top of the page
+Quote Post

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: 27.12.2025 - 02:53