| 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: 7 let
|
|||
0