Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]podzapytanie
Forum PHP.pl > Forum > Przedszkole
jacusek
Witam
Mam takie zapytanie i cały czas wyskakuje mi błąd ze składnią? Czy mógłby mi ktoś powiedzieć gdzie on może być bbo już kombinowałem na różne strony:
  1. SELECT DISTINCT date_format(czas, '%k'), count((IF(date_format(czas,'%w')=1)),czas,0) FROM billingi GROUP BY 1 ORDER BY 1 ASC

Błąd dotyczy podzapytania.
czas to termin połączenia w formacie datetime
nospor
Skoro dostajesz bład, to czy tak trudno ten błąd nam tu wkleic? Czy naprawdę trzeba pisać do Ciebie podanie z prośbą o podanie tego błędu?
jacusek
Masz rację nospor
Napisałem, ze podaje mi błąd ze składnią dokładnie w okolicach ')),czas)'
nospor
pomyliły ci się nawiasy
Zobacz też jak poprawnie wygląda konstrukcja IF bo też ci sie pomylilo - chodzi też głównie o nawiasy

Cytat
Napisałem, ze podaje mi błąd ze składnią dokładnie w okolicach ')),czas)'
Nie, wczesniej tego nie napisales. Napisales to dopiero teraz, po zlozeniu podania przeze mnie smile.gif
jacusek
szukam tego błędu i nie mogę go znaleźć. Kombinuję już z różnych stron i nie bardzo wiem jak dalej się do tego zabrać.
Opiszę swój sposób rozumowania, a może powiesz mi gdzie mogę robić błąd:
funkcja if w podzapytaniu polega na:
Jeżeli pierwsze wyrażenie - w moim przypadku
  1. date_format(czas,'%w')

jest różne od zera i różne od null - a jest smile.gif wówczas zwraca wartość nr 2, w innym przypadku zwraca numer 3.
Więc jeżeli logicznie rozumuje to:

  1. count(IF(date_format(czas,'%w')=1),id_pol,0)

Gdzie w takim razie robię błąd?
nospor
Już ci mowilem: masz blad w nawiasach a nie w logice.
  1. SELECT DISTINCT date_format(czas, '%k'), count(IF(date_format(czas,'%w')=1,czas,0)) FROM billingi GROUP BY 1 ORDER BY 1 ASC

Pozatym dla count jak podasz 0 to chyba policzy. Null nie bedzie liczony, wiec powinno byc
  1. SELECT DISTINCT date_format(czas, '%k'), count(IF(date_format(czas,'%w')=1,czas,NULL)) FROM billingi GROUP BY 1 ORDER BY 1 ASC


Nie wnikam już o co ci chodziło z tymi groub by 1 o order by 1.... Chyba nie dales dla pól nazw numerycznych?
jacusek
Dzięki za pomoc. Zdaje się, że na siłę próbowałem zamknąć date_format, a nie było widać takiej potrzeby. Group by 1 i order by 1 to aliasy które o dziwo automatycznie przypisują się do kolumn w mysql. Tak oczywiście kolumn nie nazywałem, a używam tego bo to wygodniejsze w zapytaniach na etapie prób.
nospor
Cytat
Zdaje się, że na siłę próbowałem zamknąć date_format, a nie było widać takiej potrzeby
Dlatego powiedziałem, byś zajrzał do manuala i zobaczył jak wygląda IF. Niestety mnie olałeś sad.gif

Cytat
Group by 1 i order by 1 to aliasy które o dziwo automatycznie przypisują się do kolumn w mysql.
A tego nie wiedziałem smile.gif
jacusek
oj nie olałem, nie zwróciłem na to uwagi - fakt - czasami najtrudniej zauważyć własny błąd.

A co do group by i order to tak to działa w Oraclu smile.gif i kiedyś przez pomyłkę wpisałem i okazało się że w Mysql też smile.gif
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.