Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Wyszukiwanie pomiędzy.
cabana
post
Post #1





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 25.05.2010

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


Witam.
Mam w tabeli SQL dwie kolumny START i KONIEC
w START jest zapisana godzina rozpoczęcia akcji przykładowo '17:45'
a w KONIEC jest zapisana godzina zakończenia akcji przykładowo '21:15'
obie kolumny są typu `varchar`.
Gdy użytkownik dodaje swoją akcje np. START o '18:20' i KONIEC o '19:10' chciałbym sprawdzić czy jego przedział czasowy nie jest już zarezerwowany.
Nie mam zielonego pojęcia jak się za to zabrać, próbowałem z BETWEEN i z sprawdzaniem większości i mniejszości.
Przekopywałem również google ale bez żadnych rezultatów.
Proszę o pomoc z napisaniu zapytania.

Z góry dzięki.

P.S
Każdy kto udzieli sensownej odpowiedzi w moim temacie dostanie ode mnie `+`.
Go to the top of the page
+Quote Post
peter13135
post
Post #2





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


datę/godzin,e nie zapisuj jako varchar, tylko jako TIME, lub date, lub datetime lub uniksowy znacznik czasu (integer zwracany przez php - time() lub mysql - now() )
Go to the top of the page
+Quote Post
cabana
post
Post #3





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 25.05.2010

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


No dobrze.
Tylko jak w takim wypadku sprawdzić czy dany przedział czasowy nie jest zarezerwowany?

Ten post edytował cabana 15.07.2011, 22:01:11
Go to the top of the page
+Quote Post
-Anomim-
post
Post #4





Goście







Uniksowy znacznik czasu jest liczbą, może użyj operatorów < i >
Go to the top of the page
+Quote Post
YaQzi
post
Post #5





Grupa: Zarejestrowani
Postów: 94
Pomógł: 31
Dołączył: 12.10.2008
Skąd: WAT

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


a nie można po prostu:

  1. SELECT COUNT(*) AS jest
  2. FROM tabela
  3. WHERE KONIEC > $StartIn
  4. OR START < $KoniecIn
?

Jak będzie zero to jest git. Jak nie to się nakłada.

@edit, machnąłem się w kierunkach nierówności (IMG:style_emoticons/default/wink.gif)

Ten post edytował YaQzi 15.07.2011, 22:13:42
Go to the top of the page
+Quote Post
peter13135
post
Post #6





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


select count(id) from tabelA WHERE ( (START between 18:20 AND 19:10) OR (KONIEC between 18:20 AND 19:10) ) OR ( START <18:10 AND koniec > 19:20 )

zobacz czy zadziała
Go to the top of the page
+Quote Post
cabana
post
Post #7





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 25.05.2010

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


Wszystko fajnie.
Tylko jest jeszcze kwestia jak zapisać timestamp w bazie jeśli na stronie mam coś na wzór ramówki.

Przykładowo użytkownik wybiera sobie dzień na przykład Wtorek i dodaje swoją akcję.
I trzeba to zapisać w timestamp a timestamp zawiera rok, miesiąc, dzień, godzinę, minute i sekundę.

Ten post edytował cabana 15.07.2011, 22:17:06
Go to the top of the page
+Quote Post
peter13135
post
Post #8





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


mktime
Go to the top of the page
+Quote Post
cabana
post
Post #9





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 25.05.2010

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


Cytat(peter13135 @ 15.07.2011, 23:13:17 ) *
select count(id) from tabelA WHERE ( (START between 18:20 AND 19:10) OR (KONIEC between 18:20 AND 19:10) ) OR ( START <18:10 AND koniec > 19:20 )

zobacz czy zadziała


Twoje zapytanie w każdym wypadku zwraca true czyli, że każdy przedział czasowy jest zarezerwowany.

Cytat(peter13135 @ 15.07.2011, 23:18:24 ) *


tyle to ja wiem
Go to the top of the page
+Quote Post
peter13135
post
Post #10





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


1. Aktualnie na moim netbooku nie mam moliwości sprawdzenia czy kod działa, ale nie wiem jak to się stało że count zwraca typ boolean. Jeśli nikt nie rozwiąże Twojego problemu, jutro zobaczę jak to działa.
2. to w czym problem ?
Go to the top of the page
+Quote Post
cabana
post
Post #11





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 25.05.2010

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


W tym problem, że dzisiaj mamy Piątek 2011-07-15
musiał bym sprawdzać jaki dziś jest dzień i data aby jakoś sprawdzić jaka data będzie we Wtorek

Cytat(peter13135 @ 15.07.2011, 23:33:08 ) *
1. Aktualnie na moim netbooku nie mam moliwości sprawdzenia czy kod działa, ale nie wiem jak to się stało że count zwraca typ boolean. Jeśli nikt nie rozwiąże Twojego problemu, jutro zobaczę jak to działa.
2. to w czym problem ?


Ad 1. Nie zwraca boolean tylko ja sobie sprawdzam ifem czy jest jakiś rekord jeśli tak zwracam true jeśli nie to false
Go to the top of the page
+Quote Post
peter13135
post
Post #12





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


date('w') - to Ci zwróci dzień tygodnia (0 - niedziela, 1 - poniedziałek itd.)

edit://
moje zapytanie w każdym wypadku zwróci 1 rekord (IMG:style_emoticons/default/wink.gif)

Ten post edytował peter13135 15.07.2011, 22:46:36
Go to the top of the page
+Quote Post
cabana
post
Post #13





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 25.05.2010

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


Cytat(peter13135 @ 15.07.2011, 23:44:58 ) *
date('w') - to Ci zwróci dzień tygodnia (0 - niedziela, 1 - poniedziałek itd.)

edit://
moje zapytanie w każdym wypadku zwróci 1 rekord (IMG:style_emoticons/default/wink.gif)


no dobrze tylko w jaki sposób sprawdzić jaka data będzie we wtorek jeśli dziś mamy piątek?
Go to the top of the page
+Quote Post
peter13135
post
Post #14





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


jako drugi parametr podaj znacznik czasu interesującego cie dnia.

edit://
chyba źle Ci napisałem.
musisz obliczyć różnicę między dzisiaj i wtorkiem, chyba z tym sobie poradzisz, wtorek według date('w') to 2, piątek to 5

no i potem dodaj do time() liczbę sekund odpowiadającą tej różnicy dni i wrzuć to jako drugi parametr date

Ten post edytował peter13135 15.07.2011, 23:02:41
Go to the top of the page
+Quote Post
cabana
post
Post #15





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 25.05.2010

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


chyba sobie odpuszczę to sprawdzanie, ponieważ nie mam pojęcia jak to zrobić (IMG:style_emoticons/default/sad.gif)

edit:
coś w ten deseń napisałem aby sprawdzić jaka data będzie w dany dzień

  1. <?php
  2. $dz = date('w');
  3. $data = date('Y-m-d');
  4. if ($dz == 0)
  5. {
  6. $pon = 1;
  7. $wt = 2;
  8. $sr = 3;
  9. $cz = 4;
  10. $pt = 5;
  11. $so = 6;
  12. $nd = 0;
  13. }
  14.  
  15. if ($dz == 1)
  16. {
  17. $pon = 0;
  18. $wt = 1;
  19. $sr = 2;
  20. $cz = 3;
  21. $pt = 4;
  22. $so = 5;
  23. $nd = 6;
  24. }
  25.  
  26. if ($dz == 3)
  27. {
  28. $pon = 6;
  29. $wt = 0;
  30. $sr = 1;
  31. $cz = 2;
  32. $pt = 3;
  33. $so = 4;
  34. $nd = 5;
  35. }
  36.  
  37. if ($dz == 4)
  38. {
  39. $pon = 5;
  40. $wt = 6;
  41. $sr = 0;
  42. $cz = 1;
  43. $pt = 2;
  44. $so = 3;
  45. $nd = 4;
  46. }
  47.  
  48. if ($dz == 5)
  49. {
  50. $pon = 3;
  51. $wt = 4;
  52. $sr = 5;
  53. $cz = 6;
  54. $pt = 0;
  55. $so = 1;
  56. $nd = 2;
  57. }
  58.  
  59. if ($dz == 6)
  60. {
  61. $pon = 2;
  62. $wt = 3;
  63. $sr = 4;
  64. $cz = 5;
  65. $pt = 6;
  66. $so = 0;
  67. $nd = 1;
  68. }
  69.  
  70. $add = 60 * 60 * 24 * $wt;
  71. $dl = strtotime($data);
  72. $d = $dl + $add;
  73.  
  74. echo date('Y-m-d', $d);
  75. ?>


trochę długie ale działa

Ten post edytował cabana 15.07.2011, 23:16:37
Go to the top of the page
+Quote Post
peter13135
post
Post #16





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


  1. if(date('w')>2)
  2. $roznica = 9-date('w');
  3. else
  4. $roznica 2-date('w')

tu masz różnice w dniach ale na wszelki wypadek sprawdź czy dobrze działa ten kod, bo już średnio myślę i nie mam jak sprawdzić.


echo date('Y-m-d H:i:s', time()+60*60*24*$roznica)
to ci powinno wyswietlic date jaka bedzie o we wtorek o tej samej porze co teraz (teraz - chwila odpalenia skryptu)
Go to the top of the page
+Quote Post
cabana
post
Post #17





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 25.05.2010

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


jednak sobie odpuszczę (IMG:style_emoticons/default/smile.gif)
dzięki za wszelką pomoc
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: 18.09.2025 - 17:44