Autor | Zpráva | ||
---|---|---|---|
AM_ Profil |
#1 · Zasláno: 24. 4. 2010, 20:14:38
Zdravím,
mám takovouhle nějakou strukturu: items: id, cost, rating items_properties: id_item, id_property (relace na tabulku properties, kde jsou popsany vlastnosti predmetu) Potřeboval bych dotaz, který mi sečte počet předmětů, průměrnou cenu a celkový počet vlastností předmětů (v praxi je to blbost, jen zjednodušuji problém, který mám ve skutečnosti nad úplně jinými daty). Napadlo mne toto: SELECT COUNT(items.id), AVG(cost), COUNT(id_item) FROM items LEFT JOIN items_properties ON items.id=items_properties.id_item Výsledkem je ale, že každý předmět se započítává tolikrát, kolik má vlastností (bál jsem se, že se to takhle bude chovat, vzhledem k tomu, jak spojování tabulek funguje). Když přidám GROUP BY items.id, tak je zase výsledek několik řádků, kde se mi pro každý předmět vytvoří jeden řádek a jeho vlastnosti se sečtou, ale já chci celkový součet všeho. Teď mě napadá, že by to šlo pomocí vnořeného dotazu - nejdříve pomocí GROUP BY sečíst počet vlastností a v dalším dotaze to sečíst celkově, ale slyšel jsem, že MySQL neumí indexovat ve vnořených dotazech a že to může být opravdu pomalé. Neexistuje tedy prosímvás jiné řešení bez vnořených dotazů? díky. |
||
Kajman_ Profil * |
#2 · Zasláno: 24. 4. 2010, 22:04:46
SELECT COUNT(items.id), AVG(cost), (SELECT COUNT(*) FROM items JOIN items_properties ON items.id=items_properties.id_item) prop_count FROM items Pokud nejsou properties bez vazby na item, nemusí tam být join k items. |
||
AM_ Profil |
#3 · Zasláno: 25. 4. 2010, 02:33:10
díky :) takže ale bez poddotazu to nejde, co
|
||
TomášK Profil |
#4 · Zasláno: 25. 4. 2010, 04:26:18
Mám podezření, že by to šlo přes GROUP BY WITH ROLLUP, ale nikdy jsem to nepoužil. Je to specialita MySQL, nevím, jestli to má podporu i jinde.
|
||
Časová prodleva: 14 let
|
0