Tomasz Dzioba

Tomasz Dzioba wszystkiego po
trochu

Temat: [MySQL] Wyniki wyświetlane jak w excelu

Witam,

Nie miałem pomysłu na nazwę dla tematu, bo oczywiste jest, że w obu przypadkach jest tabela. O co mi chodzi? Już tłumaczę. Zastanawiam się w jaki sposób stworzyć zapytanie dla silnika baz danych MySQL aby, tworzył dynamicznie kolumny.
Ciężko mi to wytłumaczyć, dlatego przedstawię na przykładzie.

SELECT count(pole1) as Ilosc, pole1 as IDUser, date(pole2) as Data
FROM `tabela1`
WHERE pole1>0
GROUP BY date(pole2), pole1


Dzięki takiemu zapytaniu otrzymuję mniej więcej taki wynik:

Ilosc IDUser Data
1 51 2010-05-04
2 84 2010-05-04
3 79 2010-05-04
102 79 2010-05-05
38 84 2010-05-05

Jak można zauważyć wartości z kolumny IDUser się powtarzają. Jednak dla wygodniejszego przeglądania danych preferowałbym aby otrzymać wynik mniej więcej w takiej formie:

Data User51 User84 User79
2010-05-04 1 2 3
2010-05-05 0 38 102

Czy jest możliwość aby tak skonstruować zapytanie MySQL aby dynamicznie generował kolumny ?Tomasz Dzioba edytował(a) ten post dnia 20.05.10 o godzinie 09:29
Maciej Niedźwiecki

Maciej Niedźwiecki Born to rails hell

Temat: [MySQL] Wyniki wyświetlane jak w excelu

Konkretnie taki rezultat bezpośrednio z bazy to tylko procedurą składowaną uzyskasz.
Chyba że kolumna IDUser zawiera stałą listę wartości (czyli jest to jakiś słownik - płeć, nazwa działu etc.) i nie jest ich zbyt dużo, to można skorzystać z takiego rozwiązania:
http://en.wikibooks.org/wiki/MySQL/Pivot_table

Natomiast o wiele prościej jest uzyskany w pierwszym Twoim zapytaniu wynik przepuścić przez prostą pętlę już w docelowym języku i uzyskać pożądaną postać tabeli.

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora

konto usunięte

Temat: [MySQL] Wyniki wyświetlane jak w excelu

Tomasz Dzioba:
Czy jest możliwość aby tak skonstruować zapytanie MySQL aby dynamicznie generował kolumny ?Tomasz Dzioba edytował(a) ten post dnia 20.05.10 o godzinie 09:29

http://www.gyurcit.hu/pivot.html
Krzysztof Szelążek

Krzysztof Szelążek Senior .net
Developer

Temat: [MySQL] Wyniki wyświetlane jak w excelu

Tomasz Dzioba:
Witam,

Nie miałem pomysłu na nazwę dla tematu, bo oczywiste jest, że w obu przypadkach jest tabela. O co mi chodzi? Już tłumaczę. Zastanawiam się w jaki sposób stworzyć zapytanie dla silnika baz danych MySQL aby, tworzył dynamicznie kolumny.
Ciężko mi to wytłumaczyć, dlatego przedstawię na przykładzie.

SELECT count(pole1) as Ilosc, pole1 as IDUser, date(pole2) as Data
FROM `tabela1`
WHERE pole1>0
GROUP BY date(pole2), pole1


Dzięki takiemu zapytaniu otrzymuję mniej więcej taki wynik:

Ilosc IDUser Data
1 51 2010-05-04
2 84 2010-05-04
3 79 2010-05-04
102 79 2010-05-05
38 84 2010-05-05

Jak można zauważyć wartości z kolumny IDUser się powtarzają. Jednak dla wygodniejszego przeglądania danych preferowałbym aby otrzymać wynik mniej więcej w takiej formie:

Data User51 User84 User79
2010-05-04 1 2 3
2010-05-05 0 38 102

Czy jest możliwość aby tak skonstruować zapytanie MySQL aby dynamicznie generował kolumny ?Tomasz Dzioba edytował(a) ten post dnia 20.05.10 o godzinie 09:29

Mozna tez dynamicznie przygotowac sql do takiej formy

SELECT DATE(pole2) AS "Data",
SUM(IF(pole1 = 1, 1, 0)) AS "User1",
SUM(IF(pole1 = 2, 1, 0)) AS "User2",
...
SUM(IF(pole1 = n, 1, 0)) AS "Usern"
FROM tabela1
WHERE pole1 > 0
GROUP BY DATE(pole2)

Czesc

SUM(IF(pole1 = 1, 1, 0)) AS "User1",
SUM(IF(pole1 = 2, 1, 0)) AS "User2",
...
SUM(IF(pole1 = n, 1, 0)) AS "Usern"

Mozna przygotowac dynamicznie odpytujac wczesniej o ilosc wystapien (sql ponizej) i w petli np php przygotowac agregacje.

SELECT DISTINCT pole1
FROM tabela1
WHERE pole 1 > 0



Wyślij zaproszenie do