Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: forest1984 07. 01. 2020, 16:11:58
-
Ahoj, potřebuji z databáze s měřením hodnot získat data pro Grafanu s měsíční periodou. Mám 2 situace, buď získávám data pro jednu veličinu(komoditu) nebo pro skupinu takových veličin(komodit). Zda se jedná o jednotlivou veličinu nebo skupinu si ukládám jiným dotazem do proměnné $commodities , krterá nabývá hodnot např (1, 2, 3 .... ) = pro jednotlivé veličiny a např. (1grp, 2grp, 3grp ...) = pro skupiny veličin.
Tak abych dotaz mohl použít v grafaně potřebuji mít obě situace v jednom dotazu, nicméně dotaz končí chybou protože vrací více řádků pro subdotaz, samostatně dotazy v case fungují a zobrazí dané hodnoty pro každý z dvanácti měsíců. Nenapadlo by prosím někoho jak situaci řešit? Předem díky
SELECT
measurement.period AS "time",
2020 AS "metric",
(CASE
WHEN '$commodities' LIKE '%grp%'
THEN (SELECT
SUM(m.value) AS "value"
FROM group_commodity as g, measurement as m, connection as c
WHERE g.group_id = REPLACE('$commodities', 'grp', '')
AND c.group_id = g.group_id
AND m.commodity_id = c.commodity_id
AND YEAR(m.period) = 2020
GROUP BY m.period)
ELSE (SELECT
value
FROM measurement, commodity
WHERE measurement.commodity_id = commodity.commodity_id
AND measurement.commodity_id = $commodities
AND YEAR(period) = 2020
ORDER BY measurement.period)
END) as "value"
FROM measurement
WHERE
YEAR(period) = 2020
-
Pokud Ti subselect vrací více hodnot, tak ho "neselekti", ale "joini"
SELECT mesaurement.*, table.* FROM measurement JOIN
(TVUJ SILENEJ SELECT
) ON (....)
Ale celej ten dotaz je zřejmě ještě nějak blbě, protože tam máš tabulku measurement dvakrát (v subselectu i hlavním selectu) a ten measurement v hlavním selectu neni vlastně použitej....
-
Pokud Ti subselect vrací více hodnot, tak ho "neselekti", ale "joini"
SELECT mesaurement.*, table.* FROM measurement JOIN
(TVUJ SILENEJ SELECT
) ON (....)
Ale celej ten dotaz je zřejmě ještě nějak blbě, protože tam máš tabulku measurement dvakrát (v subselectu i hlavním selectu) a ten measurement v hlavním selectu neni vlastně použitej....
Jo, máš pravdu, v tom hlavním selectu je ta tabulka measurement blbě. Rozdělím to na dvě části a budu ty jednotlivý veličiny a skupiny zpracovávat odděleně.
-
Tak jsem to nakonec díky nápadu z jiné diskuse vyřešil pomocí UNION.
SELECT
SUM(m.value) AS "value",
m.period AS "time",
DATE_FORMAT(NOW(), '%Y') AS "metric"
FROM group_commodity as g, measurement as m, connection as c
WHERE g.group_id = IF ('$commodities' LIKE '%grp', REPLACE('$commodities', 'grp', ''), '0')
AND c.group_id = g.group_id
AND m.commodity_id = c.commodity_id
AND YEAR(m.period) = 2020
GROUP BY m.period
UNION
SELECT
measurement.value AS "value",
measurement.period AS "time",
DATE_FORMAT(NOW(), '%Y') AS "metric"
FROM measurement, commodity
WHERE measurement.commodity_id = commodity.commodity_id
AND measurement.commodity_id = IF ('$commodities' LIKE '%grp', '0', '$commodities')
AND YEAR(period) = 2020