Autor | Zpráva | ||
---|---|---|---|
forest1984 Profil |
#1 · Zasláno: 7. 1. 2020, 16:01:43
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 |
||
tttttttt Profil * |
#2 · Zasláno: 7. 1. 2020, 20:26:39
Místo
CASE v SQL udělej podmínku na $commodities v php a rozděl to na dva dotazy.
|
||
Kajman Profil |
#3 · Zasláno: 8. 1. 2020, 00:34:07
Místo case šáhněte po unionu.
|
||
forest1984 Profil |
#4 · Zasláno: 8. 1. 2020, 08:22:51
tttttttt:
Na webu, kde to vypisuji v tabulce, to tak rozdělené mám. Tuhle hrůzu potřebuji kvůli grafaně, kde kvůli automatizaci generování panelů v dashboardu to musí být jeden dotaz. |
||
Kajman Profil |
#5 · Zasláno: 8. 1. 2020, 09:27:14
Ten union jste zkoušel? Mohlo by to být něco
SELECT m.period AS "time", 2020 AS "metric", Sum(m.value) AS "value" FROM group_commodity AS g JOIN connection AS c ON c.group_id = g.group_id JOIN measurement AS m ON m.commodity_id = c.commodity_id WHERE '$commodities' LIKE '%grp%' AND g.group_id = Replace('$commodities', 'grp', '') AND Year(m.period) = 2020 GROUP BY m.period UNION ALL SELECT m.period AS "time", 2020 AS "metric", m.value AS "value" FROM measurement AS m JOIN commodity AS c ON m.commodity_id = c.commodity_id WHERE '$commodities' NOT LIKE '%grp%' m.commodity_id = $commodities AND Year(m.period) = 2020 ORDER BY m.period |
||
forest1984 Profil |
#6 · Zasláno: 8. 1. 2020, 10:13:04
Kajman:
Díky za nápad. Přes UNION jsem to rozchodil. 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, 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 |
||
Časová prodleva: 4 roky
|
0