Jednoduchý SQL dotaz (pro spidera)
Zdravím vás bratři ve zbrani .
Mám pro vás jasný úkol. Určitě to není nic složitého.
Mám jedinou tabulku, která má tyto hodnoty:
Mám tento jednoduchý SQL dotaz:
SELECT products_id, additional_name, min( additional_value ) , case when additional_value regexp '^[0-9]' then max( additional_value ) else additional_value end as val, additional_text
FROM products_additional
WHERE TYPE = 'ADI'
GROUP BY additional_name
ORDER BY additional_name, additional_value
Výsledkem dotazu je toto:
Nejedná se o nic složitého, přesto se pro připomenutí rozepíšu.
Dotaz vytáhne hodnoty a pokud je více hodnot stejných, tak vytáhne limitní stavy.
Tedy minimum a maximum. To vidíme správně u hodnot spotřeba a Váha.
Jenomže já hlava děravá zapomněl na to, že mohou tyto hodnoty nabývat také nenumerických (nečíselných hodnot).
A v takovém případě, kdy to není číslo to potřebuji všechno vypsat po jednom - "normálně" všechny hodnoty.
Výsledek si k příkladu představuji tak, že zatímco Váha a spotřeba bude po jednom řádku (minimum a maxim - je to číslo),
tak rozlišení budou uvedena všechna (ve sloupečku val).
Děkuji za čas !
urob union dvoch selectov. jedno ti zgrupuje take, ktorych hodnoty su ciselne a druhe len surovo vypise tie, ktore su neciselne. opat som tam dal funkciu isnumeric, ktora viem, ze v mysql nie je. nahrad ju ekvivalentom (nechcelo sa mi ho hladat).
Dobře. A zeptám se, nemá tento union ten typ bugu, že zatímco horní část dotazu vytáhne nečíselné stavy do jednoho řádku,
tak spodní část to vytahne do řádků ?
Tedy že tam budu mít duplikované záznamy.
//EDIT chápu Nemá. Musel jsem se zamyslet.
Testnu to a jestli to bude chodit značím vyřešeno .
ak sa bojis duplicit, tak nahrad UNION ALL za UNION.
Ještě poslední dotaz (SQL dotaz ) :
SELECT products_id, additional_name, min( additional_value ) , case when additional_value regexp '^[0-9]' then max( additional_value ) else additional_value end as val, additional_text FROM products_additional WHERE TYPE = 'ADI' AND products_id IN (61501, 61512, 61507, 61500, 61511, 61509, 61510) AND (additional_value regexp( '^[0-9]+$') = 1) GROUP BY additional_name ORDER BY additional_name, additional_value UNION SELECT products_id, additional_name, min( additional_value ) , case when additional_value regexp '^[0-9]' then max( additional_value ) else additional_value end as val, additional_text FROM products_additional WHERE TYPE = 'ADI' AND products_id IN (61501, 61512, 61507, 61500, 61511, 61509, 61510) AND (additional_value regexp( '^[0-9]+$') = 0) GROUP BY additional_name ORDER BY additional_name, additional_value
Je korektní, ale hlásí chybu: Incorrect usage of UNION and ORDER BY
Jak z tohoto ven?
do unionu nie je mozne vlozit klauzulu order by.
urob to dvojkrokovo ... z toho union selectu sprav jedno view a potom select * from vyrobene_view order by co_chces