Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Problem z UNION
Glaser
post 25.07.2014, 09:23:39
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 15.07.2014

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


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
nospor
post 25.07.2014, 09:28:14
Post #2





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




Tak dziala wlasnie UNION. On tworzy kolejne rekordy a nie kolejne kolumny. W czym problem?


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

"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
Glaser
post 25.07.2014, 09:32:50
Post #3





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 15.07.2014

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


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?
Go to the top of the page
+Quote Post
nospor
post 25.07.2014, 09:40:32
Post #4





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




Robisz to w php? To poprostu pobierz oba rekordy i wyswietlaj obok siebie.


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

"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
Glaser
post 25.07.2014, 09:42:53
Post #5





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 15.07.2014

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


Nie, robie to w zwykłej bazie danych - MySQL Workbench.
Go to the top of the page
+Quote Post
nospor
post 25.07.2014, 09:43:19
Post #6





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




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


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

"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
in5ane
post 25.07.2014, 09:44:59
Post #7





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


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


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
Glaser
post 25.07.2014, 10:28:27
Post #8





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 15.07.2014

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


@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;
Go to the top of the page
+Quote Post
mmmmmmm
post 25.07.2014, 10:29:00
Post #9





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


  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
Go to the top of the page
+Quote Post
Glaser
post 25.07.2014, 10:32:20
Post #10





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 15.07.2014

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


Bardzo dziękuję, działa. W sumie jak tak na to patrze to całkiem prosta konstrukcja, tylko trzeba o niej wiedziec smile.gif
Go to the top of the page
+Quote Post
nospor
post 25.07.2014, 10:43:52
Post #11





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




mmm podal to samo co ja ci proponowalem tylko ze on uzyl case zamiast if... no i podal calkowitego gotowca... smile.gif


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

"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: 19.07.2025 - 05:36