Portál AbcLinuxu, 2. listopadu 2025 07:07
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.