Autor Zpráva
DeskaCZE
Profil
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
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
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(...)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0