Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z SELECT i wyświetleniem wyników :((
Forum PHP.pl > Forum > Bazy danych > MySQL
miki
Hej, mam problem z zapytaniem do mojej bazy danych. Mam 2 tabele:



Chce na mojej stronie php wyswietlic tabele z kolumnami nazwa zabytku, Opole, Warszawa, Szczecin, Zakopane, w których znajdują się odpowiednio nazwy zabytków, a potem jeżeli występuje on w Opolu, Warszawie, itd. to słowo "TAK" a jak nie, to słowo "NIE".

Mam następujący kod php:

  1. <?php
  2. $polaczenie=mysql_connect(&#092;"localhost\", \"user\", \"password\");
  3. $baza = mysql_select_db(&#092;"zabytki\");
  4.  
  5. $zapytanie = &#092;"SELECT * FROM zabytki, miasta WHERE zabytki.id_miasta = miasta.id_miasta OR
    D
  6. R BY zabytki.nazwa ASC\";
  7. $wynik = mysql_query ($zapytanie) or die (\"nie mozna wykonac zapytania\"); 
  8.  
  9. echo \"<TABLE width='900' border=0 ALIGN='CENTER'>\";
  10. echo \"<tr>\";
  11. echo \"
  12. <td>Nazwa zabytku</td>
  13. <td>Opole</td>
  14. <td>Warszawa</td>
  15. <td>Szczecin</td>
  16. <td>Zakopane</td>&#092;";
  17. echo &#092;"</tr>\";
  18.  
  19. while($row = mysql_fetch_row($wynik))
  20.  {
  21.  $id_miasta = $row[1];
  22. $nazwa = $row[2];
  23.  
  24. echo &#092;"<tr>\";
  25. echo &#092;"<td>$nazwa</td>\";
  26.  
  27. if($id_miasta == &#092;"1\")
  28. {
  29.  echo &#092;"<td>tak</td>\";
  30. }
  31. else
  32. {
  33. echo &#092;"<td>nie</td>\";
  34. }
  35.  
  36. if($id_miasta == &#092;"2\")
  37. {
  38. echo &#092;"<td>tak</td>\";
  39. }
  40. else
  41. {
  42. echo &#092;"<td>nie</td>\";
  43. }
  44.  
  45. if($id_miasta == &#092;"3\")
  46. {
  47. echo &#092;"<td>tak</td>\";
  48. }
  49. else
  50. {
  51. echo &#092;"<td>nie</td>\";
  52. }
  53.  
  54. if($id_miasta == &#092;"4\")
  55. {
  56. echo &#092;"<td>tak</td>\";
  57. }
  58. else
  59. {
  60. echo &#092;"<td>nie</td>\";
  61. }
  62.  
  63. echo &#092;"</tr>\";
  64.  
  65. }
  66. echo &#092;"</table>\";
  67. ?>


Wynik wygląda mniej więcej tak:


Chodzi o to, że zamiast jednego wiersza pokazują się 4 z tą zamą nazwą. Jak pisałam distinct przed selectem lub group by na końcu, zapytanie pobierało tylko jeden pierwszy wiersz dla każdego zabytku, tzn. wpisywało "TAK" w kolumnie Opole i "NIE" w reszcie, mimo, że powinno wpisać "TAK".

Jeżeli ktoś coś z tego co napisałam zrozumiał i ma pomysł jak to można rozwiązać, będę bardzo wdzięczna.

Pozdrawiam,
~miki
bigZbig
Przede wszystkim masz zle zaprojektowana baze danych. Tabela miasta jest ok, ale tabela zabytki to nieporozumienie.



Jesli chcesz miec poprawnie opracowany uklad tabel, przy relacjach typu m:n (wiele do wiele) - jak to zachodzi w przypadku kiedy dany rodzaj zabytku moze byc w wielu miastach, ale tez w jednym miescie moze byc wiele roznych rodzajow zabytkow - nie uda Ci sie uniknac tabel pomocniczych.

Co do istoty Twojego pytania. Zarowno przy zachowaniu twojego ukladu tabel, jak i przyjmjac moj. Nie da sie wykonac takiego zapytania, ktore zwrociloby wynik dajacy sie bezposrednio przedstawic w formie przez ciebie oczekiwanej. Uzycie dinstinct w tym przypadku nie ma sesu. Kwestie sformatowania wynikow nalezy pozostawic php

Mozna to zrobic np. przy pomocy tablic i petli for
  1. <?php
  2.  
  3. $liczba_rodzajow_zabytkow = 3;
  4. $nazwa_rodzaju = array( 
  5. 1 => 'zamek',
  6. 2 => 'klasztor'
  7. 3 => 'pomnki');
  8.  
  9. $liczba_miast = 4;
  10. $nazwa_miasta = array( 
  11. 1 => 'Opole',
  12. 2 => 'Warszawa'
  13. 3 => 'Szczecin'
  14. 4 => 'Zakopane');
  15.  
  16.  
  17. <table>
  18. <tr>
  19. <th>rodzaj zabytku</th>';
  20. for( $n; $n<$liczba_miast; $n++ ) 
  21. {
  22. print'<th>$nazwa_miasta[$n]</th>';
  23. }
  24. print'</tr>'; 
  25.  
  26. for( $i; $i<$liczba_rodzajow_zabytkow; $i++ )
  27. {
  28. print'<tr>';
  29. print'<td>'.$nazwa_rodzaju[$i].'</td>';
  30. for( $j; $j<$liczba_miast; $j++ ) 
  31. {
  32. print'<td>TAK/NIE</td>'; //warunek - kiedy TAK a kiedy NIE
  33. }
  34. print'</tr>';
  35. }
  36. print'</table>';
  37.  
  38. ?>


Do tego jak stworzyc podane wyzej tablice oraz pozostale zmienne proponuje abys doszla sama.
miki
Dzięki wielkie za pomoc! Mam teraz niezły orzech do zgryzienia w związku z funkcją array, ale może coś wymyślę.


Pozdrawiam,
~miki smile.gif
bigZbig
array(); to nie funkcja tylko tablica - taki sposob przechowywania danych.

Zapoznaj sie z tablicami bo bez tego ani rusz.
miki
A czy można zbudować taką tablicę array pobierając dane z bazy danych?? Ponieważ Ty stworzyłeś je wpisując ręcznie; a jeżeli tych rodzajów zabytków byłoby 100, to czy można je pobrać do takiej tablicy z bazy??

~miki sadsmiley02.gif
hmmm
  1. <?php
  2. $polecenie = mysql_query(&#092;"SELECT rodzaj FROM zabytki\");
  3. while ($wynik = mysql_fetch_array($polecenie, MYSQL_NUM)) {
  4. $zabytki[] = $wynik[0];
  5. }
  6. ?>

i teraz mozesz sie odwolywac do tablicy zabytki.
miki
Dzięki guitar.gif
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.