Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Problem z UNION
Forum PHP.pl > Forum > Przedszkole
Glaser
Witam. Mam pewien problem z union. Oto zapytanie

  1. SELECT sum(hour(finish-start)) AS czas FROM work_time WHERE week=1 AND day_of_week='Monday'
  2. UNION
  3. SELECT sum(hour(finish-start)) AS czaspracy FROM work_time WHERE week=1;


Otrzymuję taki wynik
czas
8
40

Chciałbym aby 8 jako liczba godzin z poniedziałku wyświetlała się w kolumnie czas, a 40 jako liczba godzin w kolumnie czaspracy:

czas czaspracy
8 40

Gdzie popełniłem błąd?
nospor
Tak dziala wlasnie UNION. On tworzy kolejne rekordy a nie kolejne kolumny. W czym problem?
Glaser
W takim razie mój błąd, przepraszam. Pojawia się więc pytanie, w jaki sposób mógłbym wyświetlić wynik tego zapytania w kolumnach obok siebie?
nospor
Robisz to w php? To poprostu pobierz oba rekordy i wyswietlaj obok siebie.
Glaser
Nie, robie to w zwykłej bazie danych - MySQL Workbench.
nospor
ps: mozesz tez zrobic to bez UNION, w jednym zapytaniu i wtedy bedziesz mial obok siebie. Tutaj bylo pisane jak to robic
http://forum.php.pl/index.php?s=&showt...t&p=1116073
in5ane
Wiem, że nie powinno się JOIN'ować do samego siebie, ale spróbuj tak, nie jest to jakiś olbrzymi błąd
  1. SELECT
  2. sum(hour(wt2.finish-start)) AS czas
  3. sum(hour(wt1.finish-start)) AS czaspracy
  4. FROM
  5. work_time wt1
  6. INNER JOIN work_time wt2 ON wt2.week = 1 AND wt2.day_of_week = 'Monday'
  7. WHERE
  8. wt1.week = 1
Glaser
@in5ane
Rozumiem, że przy jednym i drugim start tez powinno byc wt2 i wt1? Bez tego wywala błąd 'Column start in field list is ambigous'. Dodałem to czego brakuje i owszem pojawiły się 2 kolumny, jednak w każdej z nich była wartość 40 sad.gif

Teraz spróbuje zrobić coś sposobem nospor, chociaz nie wiem co z tego wyjdzie. W sqlu jestem kompletnym laikiem

Zrobiłem coś takiego, ale w czas dzien i czastydzien wyswietla mi sie po 40 ;/

  1. SELECT sum(hour(finish-start)) AS czasdzien, sum(hour(finish-start)) AS czastydzien FROM work_time WHERE (week=1 AND day_of_week='Monday') OR week=1;
mmmmmmm
  1. SELECT sum(hour(finish-start)) AS czas, sum(case when day_of_week='Monday' then hour(finish-start) end) czas pracy FROM work_time WHERE week=1
Glaser
Bardzo dziękuję, działa. W sumie jak tak na to patrze to całkiem prosta konstrukcja, tylko trzeba o niej wiedziec smile.gif
nospor
mmm podal to samo co ja ci proponowalem tylko ze on uzyl case zamiast if... no i podal calkowitego gotowca... 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.