Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php+mysql] jak znaleść jedna wartość w całym zbiorze
Forum PHP.pl > Forum > Przedszkole
wcg
Witam. Mam w moim skrypcie następujący problem. Chciałbym sprawdzić czy nr rezerwacji wpisywanego z formularza pasuje do numeru który zostanie zwróci zapytanie z bazy.
Wygląda to tak:
jeśli z formularza mam 10 i zapytanie z bazy wyjdzie 10 to ok- wolne miejsca
Wszystko działa ładnie ale jeśli z zapytania wyjdzie wiecej niz jedna liczba zaczyna się problem, pół biedy jeśli ta liczba jest jako ostatni rekord to działa dobrze, gorzej jeśli jest coś jeszcze za nią.
tzn. Pytanie moje jest takie jak sprawdzić w całym zbiorze $id1 czy jest jakaś wartość $id
  1. <?php
  2. $id = $_POST['id'];
  3. $wynik1 = mysql_query("SELECT id, przyjazd, wyjazd, pok1 FROM dg WHERE wyjazd > '$od' AND przyjazd < '$do' AND pok1='1'");
  4. while ($aa1 = mysql_fetch_array($wynik1)) {
  5. $id1 = $aa1[id];
  6. }
  7. if ($id1 == $id) {
  8. print "<p>pokój nr 1 - WOLNE MIEJSCA<br></p>";
  9. }else{
  10. print "<p>pokój nr 1 - ZAJĘTE MIEJSCA<br></p>";
  11. }
  12. ?>
nospor
Takie rzeczy robi sie na poziomie zapytania:
  1. <?php
  2. $wynik1 = mysql_query("SELECT id, przyjazd, wyjazd, pok1 FROM dg WHERE wyjazd > '$od' AND przyjazd < '$do' AND pok1='1' and id=$id");
  3. ?>

Jesli to zapytanie zwroci ci rekord, znaczy ze cos tam. Zgubilem sie co mialo u ciebie oznaczac znalecione id smile.gif

Do liczby rekordow sluzy: mysql_num_rows()
wcg
Wcześniej dla uproszczenia przykładu usunełem jeszcze jedno założenie if (empty($id1))...., a teraz będzie cieżko te dwa warunki umieścić na poziomie zapytania.
  1. <?php
  2. $id = $_POST['id'];
  3. $wynik1 = mysql_query("SELECT id, przyjazd, wyjazd, pok1 FROM dg WHERE wyjazd > '$od' AND przyjazd < '$do' AND pok1='1'");
  4. while ($aa1 = mysql_fetch_array($wynik1)) {
  5. $id1 = $aa1[id];
  6. }
  7.  
  8. if (empty($id1)) {
  9. $s1 = 0;
  10. } elseif ($id1 == $id) {
  11. $s1 = 0;
  12. }else{
  13. $s1 = 1;
  14. print "<p>pokój nr 1 - ZAJĘTE MIEJSCA<br></p>";
  15. }
  16. ?>
nospor
No ale interesuje cie pokoj o danym ID, wiec pobieraj tylko ten pokoj z bazy, czyli warunek musi byc w zapytaniu. A potem se rob co chcesz z tym co dostaniesz. POwinienes dostac albo nic, albo jeden rekord, jesli kade ID jest unikatowe. W czym problem?
wcg
Z tego zapytania do bazy wyskoczy kilka rekordów np

id ...
5 ...
7 ...
8 ...
10 ...

i tym zbiorze chce sprawdzić czy znajduje się id = 8, jeśli znajduje się to $s1 = 0, jeśli nie znajduje się to $s1 = 1. Do tego dochodzi jeszcze warunek ze jeśli id jest empty to też $s1 = 0.
nospor
To przeciez mowie: warunek na istnienie ID wstaw do bazy, jak ci podalem wczesniej.
jesli zwroci jakis rekord to: $s1 = 0,
jesli nie zwroci zadnego rekordu to: $s1 = 1,

Cytat
Do tego dochodzi jeszcze warunek ze jeśli id jest empty to też $s1 = 0.
A o jakim tu ID mowisz? z bazy? Jesli jest null, znaczy ze go nei ma i juz. Naprawde nie rozumiem gdzie widzisz problem.

Edit: dobra, dalej nie lapie Twojej idei, wiec sie poddaje
wcg
Jest tak: mamy przedział czasu nr pokoju i na skorzyżowaniu nr ID

25.08. | 5
26.08. | 5
27.08. |
28.08. | 6
29.08. | 6
30.08. | 6

Edytujemy rezerwację nr 5. Skrypt przed zapisem ma sprawdzić od 25-27 są wolne miejsca, warunek empty uzna ze nie ma bo tam jest właśnie rezerwacja nr 5. I dlatego muszę sprawdzić czy $id - to z formularza bedzie rowny $id1 to z zapytania z bazy w ktorym wyskoczy kilka rekordów tw tym przypadku 2 akurat dwie 5. Ale może być tak że wyskoczy 2,5,7 i ja właśnie sprawdzić czy w tym zbiorze liczb będzie ta 5. Twoja propozycja zeby to wstawić do zapytania nie działa.
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.