Autor | Zpráva | ||
---|---|---|---|
DeskaCZE Profil |
#1 · Zasláno: 26. 2. 2019, 07:41:46
Ahoj,
mám problém a nevím už jak z toho ven, tak se obracím na vás. Potřebuju sečíst a pak podle toho třídit hodnotu dvou sloupců na základě nějakého kritéria. Chtěl jsem to udělat pomocí podmínky. Podmínky funguje. Když nechám hodnoty TEST a TEST2 vypsat tak jsou správně. Problém je, že v momentě kdy tam přidát ten řádek "TEST + TEST2 AS SOUCETTEST," tak to hodí chybu. Když ale sčítám hodnoty napřímo, tedy ne ty vygenerované podmínkou ale ty co jsou napevno součástí tabulky tak mi to funguje. Potřebuju tu podmínku, protože potřebuju sečíst dvě buňky kde občas se stane že jedna z nich je prázdná (není NULL ale je prázdná) a to mi vrátí bohužel prázdný výsledek. Snažím se dosáhnout toho aby po sečtení prázdné buňky a buňky s číslem jsem dostal zpátky hodnotu a ne prázdný výsledek. Nevíte kde dělám chybu? $sql = "SELECT *, IF(pocet_bodu_zavod_1 = '', 0, 100) AS TEST, IF(pocet_bodu_zavod_2 = '', 0, 100) AS TEST2, TEST + TEST2 AS SOUCETTEST, FROM NAZEV_TABULKY"; Děkuji |
||
Kajman Profil |
#2 · Zasláno: 26. 2. 2019, 08:02:25
Za chybu bych v první řadě považoval ukládání čísel do textového sloupce, pak by stačilo při sčítání ošetřit prázdnou hodnotu (tedy null). A pokud byste měl normalizovaný návrh - tedy ještě druhou tabulku s body, kde bude každý závod, kterého se účastnil, na jednom řádku, tak nemusíte ošetřit ani to.
Pro současnou divnou strukturu stačí jednoduše použít SELECT t.*, IF(pocet_bodu_zavod_1 = '', 0, 100) AS TEST, IF(pocet_bodu_zavod_2 = '', 0, 100) AS TEST2, IF(pocet_bodu_zavod_1 = '', 0, 100) + IF(pocet_bodu_zavod_2 = '', 0, 100) AS SOUCETTEST FROM NAZEV_TABULKY t ORDER BY SOUCETTEST DESC Případně to můžete obalit, ale nečekal bych výkonostní rozdíl (bude to pomalé stejně). SELECT x.*, TEST + TEST2 AS SOUCETTEST FROM (SELECT t.*, IF(pocet_bodu_zavod_1 = '', 0, 100) AS TEST, IF(pocet_bodu_zavod_2 = '', 0, 100) AS TEST2 FROM NAZEV_TABULKY t) x ORDER BY SOUCETTEST DESC |
||
blaaablaaa Profil |
#3 · Zasláno: 26. 2. 2019, 08:07:10
DeskaCZE:
Není možné ty hodnoty předpočítat do tabulky? Takhle to zbytečně musí při každém dotazu sčítat a řadit bez použití indexu. Jinak je třeba místo TEST + TEST2 dát IF(...) + IF(...) |
||
Časová prodleva: 5 let
|
0