Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]Problem z porównaniem danych z jednej tabeli zdanymi w drugiej
jaqb04
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 2.02.2006

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


Witam.
Mam serwis dotyczacy zapisów studentów na specjalizacje. Mam 2 tabele:
zapisy_na_specjalizacje z kolumnami:
Id_zapisu_specjalizacja<PK>,
Id_specjalizacja<FK>,
Id_student<FK>,
Data_zapisu_specjalizacja
oraz
Specjalizacje z kolumnami:
Id_specjalizacja<PK>,
Nazwa_specjalizacji,
Liczba_miejsc,

Student logując się na serwis wybiera z listy rozwijanej specjalizację. Chodzi o to, że ilość miejsc na każdej specjalizacji jest ograniczona, więc trzeba zrobić coś takiego jak zliczanie dla każdego przedmiotu ile osób sie juz na niego zapisało i porównanie tych wyników z Liczba_miejsc. Jeżeli ilość zapisanych studentów jest mniejsza od liczby miejsc dostępnych to specjalizacja sie wyświetla na liście rozwijanej, a jeżeli liczba studentów zapisanych na specjalizacje jest równa Liczba_miejsc to specjalizacja nie wyświetla sie w liście rozwijanej.
Niby proste ale próbowałem już kilkoma sposobami i coś mi nie wychodzi. Poniżej przedstawiam kod formularza do zapisów:
  1. <body>
  2. <?php
  3. #Uruchomienie sesji
  4. #Sprawdzenie czy istnieje zmienna sesyjna login
  5. if ($HTTP_SESSION_VARS['login'])
  6. {
  7. # Dane potrzebne do polaczenia sie z baza i wybraniu odpowiedniej tabeli
  8. $host="localhost";
  9. $user="root";
  10. $pass="";
  11. $baza="zak";
  12. $tabela="Specjalizacje";
  13.  
  14.  
  15. $login=$HTTP_SESSION_VARS['login'];
  16. print"zapisy na specjalizacje<br>";
  17.  
  18. #laczenie sie z baza
  19. @mysql_connect ("$host", "$user", "$pass")
  20.               or die ("Nie mozna polaczyc sie z baza");
  21. #wybieranie tabeli
  22. @mysql_select_db ("$baza") or die ("Nie mozna wybrac bazy");
  23.  
  24.  
  25. #formularz w ktorym uzytkownik wybiera specjalizacje na ktora chce sie zapisac
  26. print"<form action=\"zapis_s.php\" method=\"post\">";
  27. #wyswietlenie nazwiska uzytkownika
  28. print "<center><h2>Jestes zalogowany jako ".$login."</h2></center><br><br>";
  29. print"<TABLE>";
  30. print "<tr><td><center><h3>PROSZE WYBRAC SPECJALIZACJE</h3></center></td>
  31.      <td><center><h3><select name=\"spec\">";
  32.  
  33.      #zapytanie wyswietlajace rekordy
  34.      $zapytanie1 = "SELECT * FROM $tabela";
  35.      #wykonanie zapytania
  36.  
  37.      
  38.      $wynik1 = mysql_query($zapytanie1);
  39.           #Wyswietlenie specjalizacji w liscie rozwijanej
  40.           while($rekord1=mysql_fetch_array($wynik1))
  41.  
  42.           {print"<option value=".$rekord1["Id_specjalizacja"].">"
  43.                  .$rekord1["Nazwa_specjalizacji"]."</option>";}
  44.  
  45.       print"</select></h3></center></td></tr>";
  46.  
  47. print "<TR><TD><center><h3><input type=\"submit\" name=\"submit\"
  48.       value=\"DALEJ->\"></h3></center></TD></TR><br>";
  49.  
  50.  
  51. PRINT"</TABLE>";
  52.        print"</form>";
  53.  
  54. }
  55.  
  56. else
  57. #jezeli niezalogowany uzytkownik znajdzie sie na
  58. #tej stronie to wyswietli mu sie komunikat:
  59. {print "Nie jestes zalogowany";
  60.    }
  61.     ?>
  62. </body>


Z góry dzięki za podpowiedzi
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Foxx
post
Post #2





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


Można np. tak, ale nie testowałem tego więc Ty to zrób.
Poza tym pewnie jest jakieś fajne pojedyńcze zapytanie SQL które załatwia sprawę ale ja go nie znam.

  1. <?php
  2. #zapytanie wyswietlajace rekordy
  3. $zapytanie1 = "SELECT * FROM $tabela";
  4. #wykonanie zapytania
  5.    
  6. $wynik1 = mysql_query($zapytanie1);
  7.  
  8. #Wyswietlenie specjalizacji w liscie rozwijanej
  9. while($rekord1=mysql_fetch_array($wynik1))
  10. {
  11.   $zapytanie2 = "SELECT count(*) FROM zapisy_na_specjalizacje WHERE Id_specjalizacja='".$rekord1['Id_specjalizacja']."'";
  12.   $wynik2 = mysql_query($zapytanie2);
  13.   $licz = mysql_fetch_array($wynik2);
  14.   if($licz[0] < $rekord1['Liczba_miejsc']){
  15.      print"<option value=".$rekord1["Id_specjalizacja"].">".$rekord1["Nazwa_specjalizacji"]."</option>";
  16.   }
  17. }
  18. ?>


Btw. tablic $HTTP_SESSION_VARS itp. używali nasi pradziadowie, możesz po prostu $_SESSION chyba że masz jakieś stare PHP, ale wtedy raczej zmień PHP.
Go to the top of the page
+Quote Post
Pilsener
post
Post #3





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Użyj po prostu w zapytaniu GROUP BY - jest to na tyle proste, że chyba nie muszę dodawać przykładu praktycznego? Ale dam:
  1. SELECT count(id),login FROM posty GROUP BY login
- zwróci login - liczba postów. Dobra, dam gotowca:

  1. SELECT specjalizacje.nazwa,count(zapisy.id)/specjalizacje.maks AS wynik
  2. FROM zapisy,specjalizacje WHERE specjalizacje.id=zapisy.id_specjalizacji
  3. GROUP BY specjalizacje.id
  4. HAVING wynik < 1
- nazwy tabel i pól napisałem inne, dostosuj do swoich potrzeb. W wyniku powinna być lista specjalizacji, na które są miejsca + % obłożenia

Ten post edytował Pilsener 25.11.2008, 09:06:31
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 - 01:49