Portál AbcLinuxu, 10. května 2025 17:14
SELECT @a, @b FROM (SELECT 1) as t WHERE (@a := 1) > 0 AND (@b := 2) > 0Jarda PS: Je to jen výřez dotazu tam kde je FROM je ve skutečnosti spojeno několik tabulek, a za tím přiřazením do @a, @b je ve skutečnosti nějaká uživatelská funkce kterou volán s parametry a další komplikovanější test, a poněvadž ji musím otestovat ale i zároveň vrátit její hodnotu, používám ty dočasné proměnné (ať se to nespouští 2x v jednom dotazu). PPS: Pro hloubání je zde plná verze dotazu:
SELECT IF(@a > 1, CONCAT(`c`.`service`, ' na ', @a, ' m.'), `c`.`service`) AS `service`, @a * @b AS `valuea`, CONCAT(`tb`.`day`, '.', 9, '. ', 2014) AS `date_to`, IFNULL(`b`.`name`, `b`.`firm`) AS `name`, `b`.`last_name`, `b`.`street`, `b`.`street_no`, `t`.`town`, `t`.`psc`, `a`.`account` AS `accounta`, `k`.`no` AS `ca`, CASE `a`.`symbola` WHEN 2 THEN `s`.`no_cotract` WHEN 1 THEN `s`.`symbol` ELSE '' END AS `ntracta`, CASE `a`.`symbolb` WHEN 2 THEN `s`.`no_cotract` WHEN 1 THEN `s`.`symbol` ELSE '' END AS `symbola` FROM `services` `s` INNER JOIN `contacts` `co` ON (`co`.`id_contact` = `s`.`id_contact`) INNER JOIN `type_payments` `tp` USING (`id_type_payment`) INNER JOIN `type_billings` `tb` USING (`id_type_billing`) INNER JOIN `billings` `b` USING (`id_billing`) INNER JOIN `concat_service_def` `c` USING (`id_service_def`) INNER JOIN `towns` `t` ON (`t`.`id_town` = `b`.`id_town`) INNER JOIN `bills_towns` `bt` ON (`b`.`id_town` = `bt`.`id_town`) INNER JOIN `bills` `a` ON (`a`.`id_bill` = `bt`.`id_bill` AND `bt`.`id_type_service` = `c`.`id_type_service`) INNER JOIN `banks` `k` ON (`k`.`id_bank` = `a`.`id_bank`) WHERE `tp`.`type_payment` = 2 AND IFNULL(YEAR(`s`.`deleted`) <= 2014, TRUE) AND IFNULL(MONTH(`s`.`deleted`) < 9, TRUE) AND `co`.`id_town` = 3 AND (@a := (`month_for_bil`(`s`.`id_service`, 2014, 9) + 3)) > 0 AND (@b := (`price_service`(`s`.`id_service_def`, CONCAT('2014-9-', day)))) > 0
Řešení dotazu:
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.