Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Zliczenie godzin
extremist
post 26.01.2020, 19:35:53
Post #1





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

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


Cześć,

Mam takie zapytanie, które ma liczyć godziny userów, ale wyświetla każdemu taką samą ilość.
  1. SELECT clients.name, clients.lastname, clients.email, SUM(TIMESTAMPDIFF(hour, events.start, events.end)) hours FROM clients LEFT JOIN events ON clients.email=events.email WHERE MONTH(events.start)='01' AND YEAR(events.start)=2020 GROUP BY clients.name, clients.lastname, clients.email


Poradziłem sobie, natomiast mam inny problem.
Szukam zapytania które wyświetli mi wpisy, które mieszczą się w zakresie dwóch dat ale w dwóch kolumnach.


Ten post edytował extremist 26.01.2020, 19:36:25
Go to the top of the page
+Quote Post
Tomplus
post 26.01.2020, 20:20:31
Post #2





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

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


  1. WHERE NOW() BETWEEN date_start AND date_stop


Może tak ?
Go to the top of the page
+Quote Post
extremist
post 31.01.2020, 11:31:37
Post #3





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

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


Działa smile.gif

Dzięki za odpowiedź.

Ostatni zakręt to dodatkowy SELECT w zapytaniu i błąd :



  1. SELECT * FROM clients WHERE email NOT IN (SELECT email FROM leaves WHERE start = '2020-02-15' OR end = '2020-02-15' OR '2020-02-15' BETWEEN start AND end) OR (SELECT email FROM events WHERE end = '2020-02-15 08:00:00') AND active = '3' ORDER BY rand() LIMIT 4


Zwraca: #1242 - Subquery returns more than 1 row.

Wyczytałem, że trzeba to zapiąć JOINEM, ale nie potrafię skleić tego w działającą całość
Go to the top of the page
+Quote Post
trueblue
post 31.01.2020, 11:56:23
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Warunek dla OR ma zwracać jeden wiersz, teraz może zwracać więcej niż 1.

Sprawdź ogólnie nawiasy, bo wygląda, że cały warunek powinien być zbudowany inaczej i być może uproszczony.


--------------------
Go to the top of the page
+Quote Post
extremist
post 31.01.2020, 12:17:52
Post #5





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

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


To mówi mi błąd, tylko nie wiem jak to w takim razie zapisać aby było ok.

Ma pokazać userów których nie ma w tych dwóch tabelach z warunkami.
Go to the top of the page
+Quote Post
nospor
post 31.01.2020, 12:21:56
Post #6





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




Zrob tych dwoch podzapytan z OR poprostu jeden UNION.


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

"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
extremist
post 31.01.2020, 12:30:30
Post #7





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

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


Faktycznie, czasami potrzeba wskazać drogę wink.gif

  1. SELECT * FROM clients WHERE email NOT IN (SELECT email FROM leaves WHERE start = '2020-02-15' OR end = '2020-02-15' OR '2020-02-15' BETWEEN start AND end UNION SELECT email FROM events WHERE end = '2020-02-15 08:00:00') AND active = '3' ORDER BY rand() LIMIT 4


Dzięki raz jeszcze
Go to the top of the page
+Quote Post
nospor
post 31.01.2020, 12:33:37
Post #8





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




Takie pytanie na boku:

start = '2020-02-15' OR end = '2020-02-15' OR '2020-02-15' BETWEEN start AND end

czy nie wystarczy poprostu
'2020-02-15' BETWEEN start AND end
? Przeciez to powinno lapac dwa poprzednie warunki


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

"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
Neutral
post 2.02.2020, 04:57:06
Post #9





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

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


Co to za warunek, jeśli można zapytać? Nie jest przypisany do żadnej nazwy, czy coś, a nie widzę, żeby się odwoływał do czegokolwiek i robił cokolwiek.

  1. -- OR '2020-02-15'


Ten post edytował Neutral 2.02.2020, 04:58:11
Go to the top of the page
+Quote Post
nospor
post 2.02.2020, 17:49:44
Post #10





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




@neutral przeciez to sie odnosi do BETWEEN ktore jest zaraz po


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

"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

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 Wersja Lo-Fi Aktualny czas: 29.03.2024 - 02:36