Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] [mysql] pętla while, nadliczbowe wyniki
--Grzegorz--
post
Post #1





Goście







Witam,

mam pytanie - jak działa pętla WHILE w sytuacji, kiedy pobieram dane z kilku tablic MYSQL (SELECT .... FROM .... AS ....)?

Kiedy wykonałem pętle WHILE przy wyborze jednej tablicy, wszystko wyświetliło się prawidłowo:

  1. <?php
  2. $pytanie = "SELECT nazwa, kursy FROM osrodki";
  3. $wykonaj = mysql_query($pytanie);
  4. while ($wynik = mysql_fetch_assoc($wykonaj))
  5. {
  6.  echo $wynik['nazwa'].":<br>";
  7.  $kurs = explode(";", $wynik['kursy']);
  8.  foreach ($kurs as $k)
  9.  {echo $k."<br>";}
  10. }
  11. ?>


Ale kiedy próbowałem tego samego z dwiema tablicami, wynik wyświetlił mi się kilka(dziesiąt? set?) razy - w kółko.

  1. <?php
  2. $pytanieD = "SELECT o.nazwa, o.kursy, k.nazwa_kursu, k.id_kursu FROM osrodki as o, kursy
     as k"
    ;
  3. $wykonajD = mysql_query($pytanieD);
  4. while ($wynikD = mysql_fetch_assoc($wykonajD))
  5. {
  6.  echo $wynikD['nazwa'].":<br>";
  7.  $kurs = explode(";", $wynikD['kursy']);
  8.  foreach ($kurs as $k)
  9.  {echo $k."<br>";}
  10. }
  11. ?>


Gdzie popełniłem błąd?
Go to the top of the page
+Quote Post
wipo
post
Post #2





Grupa: Zarejestrowani
Postów: 856
Pomógł: 19
Dołączył: 30.08.2005
Skąd: 100lica

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


Błąd masz w zapytaniu. Pętla działa prawidłowo.
W zapytaniu nie dałeś warunku łączenia tabel przez co dostaniesz x*y wyników bo każdy rekord tablicy x został połączony z każdym rekorem z bazy y
Go to the top of the page
+Quote Post
--Grzegorz--
post
Post #3





Goście







Dziękuję bardzo - pomogło (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Teraz pętla wykonuje się prawidłowo.

Chciałbym teraz przejść do następnego kroku, tzn. połączyć otrzymane rezultaty $k z odpowiednią 'nazwą_kursu' dobieraną wg klucza 'id_kursu". Inaczej mówiąc - chciałbym, żeby skrypt skojarzył otrzymane wyniki $k (pięciocyfrowe liczby) z odpowiednimi 'id_kursu' i przyporządkował im adekwatną 'nazwę_kursu'. Myślałem, że wystarczy tutaj warunek if:

  1. <?php
  2. $pytanie = "SELECT o.nazwa, o.kursy, k.nazwa_kursu, k.id_kursu FROM osrodki as o, kursy
     as k WHERE o.kursy=k.id_kursu"
    ;
  3. $wykonaj = mysql_query($pytanie);
  4. while ($wynik = mysql_fetch_assoc($wykonaj))
  5. {
  6.  echo $wynik['nazwa'].":<br>";
  7.  $kurs = explode(";", $wynik['kursy']);
  8.  foreach ($kurs as $k)
  9.  {
  10.  if ($k = $wynik['id_kursu'])
  11. {echo $k." - ".$wynik['nazwa_kursu']."<br>";}
  12.  }
  13. }
  14. ?>


...Ale to nie zadziałało. Nie zadziałało też "==", ani użycie pętli for. Gdzie się mylę?
Go to the top of the page
+Quote Post
Hazel
post
Post #4





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


  1. <?php
  2. if ($k == $wynik['id_kursu'])
  3. {
  4.  echo $k." - ".$wynik['nazwa_kursu']."<br>";
  5. }
  6. ?>


Jesteś pewien, że taki kod nie działa?
P.S. Wcinaj kod prawidłowo, a dobrze na tym wyjdziesz.

Ten post edytował Hazel 2.09.2007, 14:44:31
Go to the top of the page
+Quote Post
--Grzegorz--
post
Post #5





Goście







Cytat(Hazel @ 2.09.2007, 14:44:09 ) *
  1. <?php
  2. if ($k == $wynik['id_kursu'])
  3. {
  4.  echo $k." - ".$wynik['nazwa_kursu']."<br>";
  5. }
  6. ?>


Jesteś pewien, że taki kod nie działa?
P.S. Wcinaj kod prawidłowo, a dobrze na tym wyjdziesz.


Nie... nie działa. Dla każdego ośrodka ('nazwa') wyświetla tylko jeden (pierwszy) wynik 'nazwa_kursu'. A tych wyników powinna być cała lista (osobna lista dla każdego z ośrodków).
Go to the top of the page
+Quote Post
Hazel
post
Post #6





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


Prześlij mi wywołanie funkcji var_dump($wykonaj);
Bo inaczej nie umiem Ci pomóc, nie znam struktury Twojej bazy danych i tego, co zwraca mysql_fetch_assoc()... A ten kod jest trochę niejasno napisany i nie umiem dojść, do czego on ma służyć...
Go to the top of the page
+Quote Post
--Grzegorz--
post
Post #7





Goście







Cytat(Hazel @ 3.09.2007, 10:12:00 ) *
Prześlij mi wywołanie funkcji var_dump($wykonaj);
Bo inaczej nie umiem Ci pomóc, nie znam struktury Twojej bazy danych i tego, co zwraca mysql_fetch_assoc()... A ten kod jest trochę niejasno napisany i nie umiem dojść, do czego on ma służyć...


Hazel - może zadam bardziej ogólne pytanie: w jaki sposób mogę skojarzyć elementy zapisane w ciągu 'tagów' (w moim wypadku jest to 'kursy' - np. "31965;89545;94356;") z tabeli 1 (tabela 'osrodki') z konkretnymi rekordami z tabeli 2 (w moim wypadku chodzi o 'nazwa_kursu' z tabeli 'kursy', gdzie 'id_kursu' powinien być identyczny z wynikami ciągu; np. "31965 - Audytor wewnętrzny", "89545 - Programista Java", "94356 - Makler giełdowy").

Czyli - usuwając nawiasy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) - w jaki sposób mogę skojarzyć elementy zapisane w ciągu 'tagów' z tabeli 1 z konkretnymi rekordami z tabeli 2?
Go to the top of the page
+Quote Post
Hazel
post
Post #8





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


Nie bardzo wiem, co masz na myśli, mówiąc "skojarzyć". Porównać? Przypisać jedno do drugiego?
Go to the top of the page
+Quote Post
--Grzegorz--
post
Post #9





Goście







Cytat(Hazel @ 3.09.2007, 18:53:39 ) *
Nie bardzo wiem, co masz na myśli, mówiąc "skojarzyć". Porównać? Przypisać jedno do drugiego?


Tak, przypisać. Tak jak w przykładzie z mojego poprzedniego posta.
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: 23.08.2025 - 09:33