Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/MySQL] Wyszukiwanie danych w bazie
Forum PHP.pl > Forum > PHP
karol13
Witam,

mam problem z wyszukaniem danych które poda użytkownik.
Zobrazowałem to na screenie:


Próbowałem z
  1. LIKE %$wartość%

także z pierwsza i ostatnią cyfrą to też odpada oraz z pełnotekstowym wyszukiwaniem:
  1. $query_godzina = mysql_query("SELECT *, MATCH(godzina) AGAINST ('".$wynik."') FROM $database");

ale podając 12.13 wyszukiwało mi także 10.11 wszystko z cyfrą jeden.

Moje pytanie brzmi jak zrobić by wyszukiwało mi w bazie każdy wpis który zawiera cześć tego wyrażenia. (tak jak na obrazku)
Wazniak96
Racjonalniej i łatwiej byłoby stworzyć dwie kolumny int z godziną rozpoczęcia i zakończenia. smile.gif Wtedy wyglądałoby to tak:
  1. $hStart = 9;
  2. $hEnd 15;
  3.  
  4. $query = mysql_query("SELECT * FROM tab WHERE hStart > '$hStart' AND hEnd < '$hEnd'");
karol13
Przecież napisałem, że tak robiłem i nie działa. Znaczy działa ale gdy mam w bazie np. początkową godzinę 11 a końcową 17.

To po wpisaniu:
  1. SELECT * FROM tabelka WHERE godzinaod >= '12' AND godzinado <= '17'


Nie wyskakuje mi żaden rekord.
nospor
To pokaz jak wyglada tabela z tymi dwoma polami i jak wygladają rekordy wowczas
karol13
Tabelka przykładowo tak:


Zrobiłem coś takiego:
  1. $query_godzina = mysql_query("SELECT * FROM $database WHERE godzinaod >= '$formatgodzina'");
  2. $query_godzinaa = mysql_query("SELECT * FROM $database WHERE godzinado <= '$formatgodzinado'");


  1. IF(mysql_num_rows($query_godzina) AND //lub OR $query_godzinaa > 0)
  2. {
  3. include 'error-message-reservation.php'; die;
  4. }
  5. else
  6. {
  7. //tutaj dalej idzie jak nie będzie błędu
  8.  
  9. }


Działa ale jak mam 10 i 14 godzinę już w bazie to 8 i 12 przykładowo nie mogę zarejestrować (poprawnie) a 11 i 15 mogę zarejestrować (niepoprawnie).

Odświeżam.
Ma ktoś jakiś pomysł?
Wazniak96
Spróbuj tak smile.gif
  1. $query = mysql_query("SELECT * FROM $database WHERE godzinaod >= '$formatgodzina' AND godzinado <= '$formatgodzina'");
karol13
Cytat(Wazniak96 @ 8.05.2014, 07:58:06 ) *
Spróbuj tak smile.gif
  1. $query = mysql_query("SELECT * FROM $database WHERE godzinaod >= '$formatgodzina' AND godzinado <= '$formatgodzina'");


Przecież kilka postów wyżej zrobiłem to samo i nie działa.

Odświeżam.
ziolo
  1. mysql_query("SELECT * FROM database WHERE (godzinaod <= '$formatgodzina' AND godzinado >= '$formatgodzina') or (godzinaod <= '$formatgodzinado' AND godzinado >= '$formatgodzinado') ");


Zrób coś takiego, nie wiem czy do końca dobrze napisałem bo tego nie testowałem, ale jeden warunek to za mało. Powyższe polecenie z dwoma warunkami powinno działać.
karol13
Cytat(ziolo @ 9.05.2014, 23:19:02 ) *
  1. mysql_query("SELECT * FROM database WHERE (godzinaod <= '$formatgodzina' AND godzinado >= '$formatgodzina') or (godzinaod <= '$formatgodzinado' AND godzinado >= '$formatgodzinado') ");


Zrób coś takiego, nie wiem czy do końca dobrze napisałem bo tego nie testowałem, ale jeden warunek to za mało. Powyższe polecenie z dwoma warunkami powinno działać.


Też nie działa ale już trochę lepiej, bo rejestruje mi przykładowo 11 - 14, 8 - 9 ale gdy rejestruje 10 - 15 też rejestruje a nie powinno.
ziolo
Cytat(karol13 @ 10.05.2014, 11:07:53 ) *
Też nie działa ale już trochę lepiej, bo rejestruje mi przykładowo 11 - 14, 8 - 9 ale gdy rejestruje 10 - 15 też rejestruje a nie powinno.


Fakt trzeba jeszcze dodać jeden warunek or :

  1. mysql_query("SELECT * FROM database WHERE (godzinaod <= '$formatgodzina' AND godzinado >= '$formatgodzina') or (godzinaod <= '$formatgodzinado' AND godzinado >= '$formatgodzinado') or (godzinaod >= '$formatgodzina' AND godzinado <= '$formatgodzinado') ");

karol13
Dzięki wielkie działa jak należy ! Mam jeszcze pytanie dotyczące sprawdzania też daty powiedzmy mam zmienną $data i mam pytanie:
  1. SELECT * FROM $database WHERE DATA = '$data'


Jak połączyć to by np. na 11.05 jeżeli jest zarejestrowana godzina 10 - 15 to by przykładowo 12.05 dało się także zarejestrować ten termin?


Odnawiam.
nospor
Odswiezasz ten post juz chyba przez tydzien..... przez ten czas to chocby z nudow powinienies znaleźć rozwiązanie....

Do warunku z datą dodajesz AND i w nawiasie caly warunek godzinami
karol13
Cytat(nospor @ 18.05.2014, 09:49:34 ) *
Odswiezasz ten post juz chyba przez tydzien..... przez ten czas to chocby z nudow powinienies znaleźć rozwiązanie....

Do warunku z datą dodajesz AND i w nawiasie caly warunek godzinami


Zrobiłem już wcześniej tak jak napisałeś i nie działało. Dlatego odświeżam post.
nospor
To napisz jak to napisales, bo byc moze zrobiles to źle.
I nie pisz "nie dziala", tylko pisz czym sie objawia to niedzialanie. Naucz się pisac normalnie na forum
karol13
Warunek DATA+GODZINA:
  1. $query_godzina = mysql_query("SELECT * FROM $database WHERE data = '$data'") AND ("SELECT * FROM $database WHERE (godzinaod <= '$formatgodzina' AND godzinado >= '$formatgodzina') or (godzinaod <= '$formatgodzinado' AND godzinado >= '$formatgodzinado') or (godzinaod >= '$formatgodzina' AND godzinado <= '$formatgodzinado') ");


Potem mam warunek:
  1. IF(mysql_num_rows($query_godzina ) >0) {include 'error-message-reservation.php'; die;}
  2. IF(!mysql_num_rows($query_godzina))


Na jeden dzień mogę zarejestrować tylko jedną godzinę.
Chcę bym mógł na każdy dzień zarejestrować każdą godzinę, ale ma to się nie powtarzać, czyli zarejestrowana godzina na dany dzień nie może się powtarzać.
Od razu przepraszam za to jak opisuje błąd, próbuje przyłożyć się do tego by jak najłatwiej zrozumieć problem.
nospor
Nie wiem jaką trzeba miec wyobraźnie, by po tekscie
Cytat
Do warunku z datą dodajesz AND i w nawiasie caly warunek godzinami

zrobic to co zrobiles


Skoro zapytanie z godzinami wyglada tak
SELECT * FROM database WHERE (godzinaod <= '$formatgodzina' AND godzinado >= '$formatgodzina') or (godzinaod <= '$formatgodzinado' AND godzinado >= '$formatgodzinado') or (godzinaod >= '$formatgodzina' AND godzinado <= '$formatgodzinado')

a zapytanie z datą tak:
SELECT * FROM $database WHERE DATA = '$data'

To po moich slowach mialo powstac takie zapytanie:
SELECT * FROM $database WHERE DATA = '$data' and ((godzinaod <= '$formatgodzina' AND godzinado >= '$formatgodzina') or (godzinaod <= '$formatgodzinado' AND godzinado >= '$formatgodzinado') or (godzinaod >= '$formatgodzina' AND godzinado <= '$formatgodzinado'))
karol13
Pewnie dziwną. happy.gif

Dzięki wielkie.
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.