Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Zliczenie godzin
extremist
post
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.
(IMG:https://iv.pl/images/201f133ce6ba3d049ddf995a6e50cff3.png)

Ten post edytował extremist 26.01.2020, 19:36:25
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Tomplus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
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
Post #3





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

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


Działa (IMG:style_emoticons/default/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
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
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
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
Post #6





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




Zrob tych dwoch podzapytan z OR poprostu jeden UNION.
Go to the top of the page
+Quote Post
extremist
post
Post #7





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

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


Faktycznie, czasami potrzeba wskazać drogę (IMG:style_emoticons/default/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
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
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
Go to the top of the page
+Quote Post
Neutral
post
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
Post #10





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




@neutral przeciez to sie odnosi do BETWEEN ktore jest zaraz po
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: 24.08.2025 - 02:27