Autor | Zpráva | ||
---|---|---|---|
Perry Profil |
#1 · Zasláno: 22. 1. 2011, 19:07:52
Zdravím..
Mám tabulku se strukturou Nazev (varchar) - Typ (enum) - ID A - jedna - 1 B - jedna - 2 B - dva - 3 A - dva - 4 E - tri - 5 A chtel bych data vybrat jako Nazev - Jedna - Dva - Tri A - 1 - 4 - NULL B - 2 - 3 - NULL E - NULL - NULL - 5 Neboli vytvořit sloupce se jménem podle enumu a vyplnit je IDčkama záznamů :) |
||
Kcko Profil |
#2 · Zasláno: 22. 1. 2011, 19:21:20
podívejte se na
GROUP_CONCAT |
||
Perry Profil |
#3 · Zasláno: 22. 1. 2011, 19:25:30
Kcko: GROUP_CONCAT je jen spojeni retezcu, nevytvori mi sloupce na ktery pak muzu pristupovat jako na [jedna], [dva] atd...
|
||
Kcko Profil |
#4 · Zasláno: 22. 1. 2011, 19:48:04
Ale to nevytvoří žádná funkce. Jak chcete přistupovat na sloupce, když to jsou jen odlišné hodnoty pouze jednoho?
|
||
Kajman_ Profil * |
#5 · Zasláno: 22. 1. 2011, 20:47:50
Možná vygenerovat něco jako
select nazev, max(case when typ = 'jedna' then id end) Jedna, max(case when typ = 'dva' then id end) Dva from tabulka group by nazev Ale lepší bude formátovat tabulku např. v php. |
||
Perry Profil |
#6 · Zasláno: 22. 1. 2011, 21:19:09
Kajman_: Zkusím porovnat časy, zda to vyjde lépe přes MySQL nebo to ručně pak dělat v PHP
|
||
Perry Profil |
#7 · Zasláno: 23. 1. 2011, 16:54:54
Tak jsem to testoval... Původní vybírací dotaz běžel 45ms (vybíral cca 8x více řádek), nyní to běží kolem 20ms s tím, že řádky jsou ve sloupcích a grupovaný podle nazvu... takže je to urychlení, tím pádem se nevyplatí PHP (otázka paměti je druhá věc, ale nemělo by to nějak moc vytěžovat)
|
||
Časová prodleva: 11 dní
|
|||
Perry Profil |
#8 · Zasláno: 3. 2. 2011, 15:27:07
Kajman:
A nevíš, jak bych případně spočítal průměr pro nazev ? Mám tabulku hodnoty(hodnota, ID) |
||
panther Profil |
#9 · Zasláno: 3. 2. 2011, 15:56:51 · Upravil/a: panther
|
||
Perry Profil |
#10 · Zasláno: 3. 2. 2011, 17:04:51
jo.. je to pomocí AVG... ale ta AVG by musel být něco ve stylu
select nazev, max(case when typ = 'jedna' then id end) Jedna, max(case when typ = 'dva' then id end) Dva, (SELECT AVG(hodnota) FROM hodnoty WHERE ID IN (Jedna, Dva)) AS prumer from tabulka group by nazev což ovšem takto nefunguje a nevím jak to napsat |
||
Kajman_ Profil * |
#11 · Zasláno: 4. 2. 2011, 08:44:14
a nevím jak to napsat
Čeho přesně potřebujete průměr? Nebude na to lepší druhý dotaz? |
||
Perry Profil |
#12 · Zasláno: 4. 2. 2011, 08:59:45 · Upravil/a: Perry
No.. potřebuju průměr u každého záznamu
A - 1 - 4 - NULL - prumer pro A (z tabulky hodnoty pro ID 1, 4) B - 2 - 3 - NULL - prumer pro B (z tabulky hodnoty pro ID 2, 3) E - NULL - NULL - 5 - prumer pro E (z tabulky hodnoty pro ID 5) |
||
Kajman_ Profil * |
select t.nazev, max(case when t.typ = 'jedna' then t.id end) Jedna, max(case when t.typ = 'dva' then t.id end) Dva, avg(h.hodnota) prumer from tabulka t left join hodnoty h on t.id=h.id group t.nazev |
||
Perry Profil |
#14 · Zasláno: 4. 2. 2011, 11:19:59
Díky ... to je ono...
|
||
Časová prodleva: 13 let
|
0