Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP/MySQL] Wyszukiwanie danych w bazie
karol13
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.05.2014

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


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)
Go to the top of the page
+Quote Post
Wazniak96
post
Post #2





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

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


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'");


Ten post edytował Wazniak96 4.05.2014, 16:45:11
Go to the top of the page
+Quote Post
karol13
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.05.2014

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


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.
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




To pokaz jak wyglada tabela z tymi dwoma polami i jak wygladają rekordy wowczas


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
karol13
post
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.05.2014

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


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ł?
Go to the top of the page
+Quote Post
Wazniak96
post
Post #6





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

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


Spróbuj tak smile.gif
  1. $query = mysql_query("SELECT * FROM $database WHERE godzinaod >= '$formatgodzina' AND godzinado <= '$formatgodzina'");
Go to the top of the page
+Quote Post
karol13
post
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.05.2014

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


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.
Go to the top of the page
+Quote Post
ziolo
post
Post #8





Grupa: Zarejestrowani
Postów: 82
Pomógł: 20
Dołączył: 17.01.2009
Skąd: Kraków

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


  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ć.

Ten post edytował ziolo 9.05.2014, 22:27:36
Go to the top of the page
+Quote Post
karol13
post
Post #9





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.05.2014

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


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.
Go to the top of the page
+Quote Post
ziolo
post
Post #10





Grupa: Zarejestrowani
Postów: 82
Pomógł: 20
Dołączył: 17.01.2009
Skąd: Kraków

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


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') ");

Go to the top of the page
+Quote Post
karol13
post
Post #11





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.05.2014

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


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.

Ten post edytował karol13 18.05.2014, 00:31:24
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
karol13
post
Post #13





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.05.2014

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


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.
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
karol13
post
Post #15





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.05.2014

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


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.

Ten post edytował karol13 19.05.2014, 20:59:30
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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'))


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
karol13
post
Post #17





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 4.05.2014

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


Pewnie dziwną. happy.gif

Dzięki wielkie.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 15:00