MySQL functions and param query

Stimulsoft Reports.PHP discussion
Post Reply
Pawel Kasztelan
Posts: 3
Joined: Fri Mar 28, 2014 8:28 am

MySQL functions and param query

Post by Pawel Kasztelan »

Hello,
I have a little problem with a query.

Code: Select all

CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `root_user`@`%` 
    SQL SECURITY DEFINER
VIEW `stimulsoft_acc_srv_pojazdy_szczegoly` AS
    select 
        (select 
                `stimulsoft_acc_poj_ewidencja`.`pje_LicznikPoczatkowy`
            from
                `stimulsoft_acc_poj_ewidencja`
            where
                ((`stimulsoft_acc_poj_ewidencja`.`pje_Pojazd` = param1())
                    and (`stimulsoft_acc_poj_ewidencja`.`pje_NR` = 1))
            limit 1) AS `Stan_Poczatkowy`,
        (select 
                `stimulsoft_acc_poj_ewidencja`.`pje_LicznikKoncowy`
            from
                `stimulsoft_acc_poj_ewidencja`
            where
                (`stimulsoft_acc_poj_ewidencja`.`pje_Pojazd` = param1())
            order by `stimulsoft_acc_poj_ewidencja`.`pje_NR` desc
            limit 1) AS `Stan_Koncowy`,
        ((select 
                `stimulsoft_acc_poj_ewidencja`.`pje_LicznikKoncowy`
            from
                `stimulsoft_acc_poj_ewidencja`
            where
                (`stimulsoft_acc_poj_ewidencja`.`pje_Pojazd` = param1())
            order by `stimulsoft_acc_poj_ewidencja`.`pje_NR` desc
            limit 1) - (select 
                `stimulsoft_acc_poj_ewidencja`.`pje_LicznikPoczatkowy`
            from
                `stimulsoft_acc_poj_ewidencja`
            where
                ((`stimulsoft_acc_poj_ewidencja`.`pje_Pojazd` = param1())
                    and (`stimulsoft_acc_poj_ewidencja`.`pje_NR` = 1))
            limit 1)) AS `Stan_PoczEwid`
    from
        `stimulsoft_acc_poj_ewidencja`
    where
        ((`stimulsoft_acc_poj_ewidencja`.`pje_Pojazd` = param1())
            and (`stimulsoft_acc_poj_ewidencja`.`pje_NR` = 1))
I created a view based on the function and calls him asking:

Code: Select all

select * from (select @param1:={AutoId} p) parm , stimulsoft_acc_srv_pojazdy_szczegoly s;
stimul_1.png
stimul_1.png (15.8 KiB) Viewed 2900 times
Where {AutoID} is the number of the vehicle.


My problem is that @ param1 is detected by the program as a parameter to the application. Print preview does not show up.
stimul_1a.png
stimul_1a.png (199.9 KiB) Viewed 2900 times
Do you have any idea how to solve it?

Best Regards
Paweł Kasztelan
Alex K.
Posts: 6488
Joined: Thu Jul 29, 2010 2:37 am

Re: MySQL functions and param query

Post by Alex K. »

Hello,

Can you please send us a test data for analysis.

Thank you.
Pawel Kasztelan
Posts: 3
Joined: Fri Mar 28, 2014 8:28 am

Re: MySQL functions and param query

Post by Pawel Kasztelan »

Create table:

Code: Select all

CREATE TABLE `acc_poj_ewidencja` (
  `pje_Id` int(11) NOT NULL AUTO_INCREMENT,
  `pje_NR` int(11) DEFAULT NULL,
  `pje_UsrId` int(11) DEFAULT NULL,
  `pje_Timestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `pje_Data` date DEFAULT NULL,
  `pje_LicznikPoczatkowy` int(11) DEFAULT NULL,
  `pje_LicznikKoncowy` int(11) DEFAULT NULL,
  `pje_Kilometry` int(11) DEFAULT NULL,
  `pje_Cel` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `pje_CelSluzbowy` tinyint(1) DEFAULT '1',
  `pje_Skad` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `pje_Dokad` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `pje_Uwagi` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `pje_Pojazd` int(11) DEFAULT NULL,
  `pje_Kierowca` int(11) DEFAULT NULL,
  PRIMARY KEY (`pje_Id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Insert data:

Code: Select all

/*
-- Query: SELECT * FROM agility2.acc_poj_ewidencja
LIMIT 0, 1000

-- Date: 2014-03-28 14:42
*/
INSERT INTO `acc_poj_ewidencja` (`pje_Id`,`pje_NR`,`pje_UsrId`,`pje_Timestamp`,`pje_Data`,`pje_LicznikPoczatkowy`,`pje_LicznikKoncowy`,`pje_Kilometry`,`pje_Cel`,`pje_CelSluzbowy`,`pje_Skad`,`pje_Dokad`,`pje_Uwagi`,`pje_Pojazd`,`pje_Kierowca`) VALUES (14,1,1,'2014-03-26 11:24:12','2014-03-26',0,90,90,NULL,1,'','','Brak wpisu',1,NULL);
INSERT INTO `acc_poj_ewidencja` (`pje_Id`,`pje_NR`,`pje_UsrId`,`pje_Timestamp`,`pje_Data`,`pje_LicznikPoczatkowy`,`pje_LicznikKoncowy`,`pje_Kilometry`,`pje_Cel`,`pje_CelSluzbowy`,`pje_Skad`,`pje_Dokad`,`pje_Uwagi`,`pje_Pojazd`,`pje_Kierowca`) VALUES (17,2,1,'2014-03-27 15:59:33','2014-03-27',90,101,11,'Po bułki',0,'','','heheszki',1,2);
INSERT INTO `acc_poj_ewidencja` (`pje_Id`,`pje_NR`,`pje_UsrId`,`pje_Timestamp`,`pje_Data`,`pje_LicznikPoczatkowy`,`pje_LicznikKoncowy`,`pje_Kilometry`,`pje_Cel`,`pje_CelSluzbowy`,`pje_Skad`,`pje_Dokad`,`pje_Uwagi`,`pje_Pojazd`,`pje_Kierowca`) VALUES (18,3,1,'2014-03-27 16:00:23','2014-03-27',101,142,41,'Po lody',0,'','','sadadasdasd',1,2);
INSERT INTO `acc_poj_ewidencja` (`pje_Id`,`pje_NR`,`pje_UsrId`,`pje_Timestamp`,`pje_Data`,`pje_LicznikPoczatkowy`,`pje_LicznikKoncowy`,`pje_Kilometry`,`pje_Cel`,`pje_CelSluzbowy`,`pje_Skad`,`pje_Dokad`,`pje_Uwagi`,`pje_Pojazd`,`pje_Kierowca`) VALUES (19,1,1,'2014-03-27 16:04:47','2014-03-27',0,11,11,'Po bułki',0,'Toruń','Toruń','Zjadłem pączka i upaćkałem tapicerkę',2,6);
first view:

Code: Select all

CREATE OR REPLACE
    ALGORITHM = UNDEFINED 
    DEFINER = `{USER}`@`%` 
    SQL SECURITY DEFINER
VIEW `view_poj_ewidencja` AS
    select 
        `acc_poj_ewidencja`.`pje_Id` AS `pje_Id`,
        `acc_poj_ewidencja`.`pje_NR` AS `pje_NR`,
        `acc_poj_ewidencja`.`pje_UsrId` AS `pje_UsrId`,
        `acc_poj_ewidencja`.`pje_Timestamp` AS `pje_Timestamp`,
        `acc_poj_ewidencja`.`pje_Data` AS `pje_Data`,
        `acc_poj_ewidencja`.`pje_LicznikPoczatkowy` AS `pje_LicznikPoczatkowy`,
        `acc_poj_ewidencja`.`pje_LicznikKoncowy` AS `pje_LicznikKoncowy`,
        `acc_poj_ewidencja`.`pje_Kilometry` AS `pje_Kilometry`,
        `acc_poj_ewidencja`.`pje_Cel` AS `pje_Cel`,
        `acc_poj_ewidencja`.`pje_CelSluzbowy` AS `pje_CelSluzbowy`,
        `acc_poj_ewidencja`.`pje_Skad` AS `pje_Skad`,
        `acc_poj_ewidencja`.`pje_Dokad` AS `pje_Dokad`,
        `acc_poj_ewidencja`.`pje_Uwagi` AS `pje_Uwagi`,
        `acc_poj_ewidencja`.`pje_Pojazd` AS `pje_Pojazd`
    from
        (`acc_poj_ewidencja`)

;
last view

Code: Select all

CREATE OR REPLACE
    ALGORITHM = UNDEFINED 
    DEFINER = `{DATABASE}`@`%` 
    SQL SECURITY DEFINER
VIEW `stimulsoft_acc_srv_pojazdy_szczegoly` AS
    select 
        (select 
                `stimulsoft_acc_poj_ewidencja`.`pje_LicznikPoczatkowy`
            from
                `stimulsoft_acc_poj_ewidencja`
            where
                ((`stimulsoft_acc_poj_ewidencja`.`pje_Pojazd` = param1())
                    and (`stimulsoft_acc_poj_ewidencja`.`pje_NR` = 1))
            limit 1) AS `Stan_Poczatkowy`,
        (select 
                `stimulsoft_acc_poj_ewidencja`.`pje_LicznikKoncowy`
            from
                `stimulsoft_acc_poj_ewidencja`
            where
                (`stimulsoft_acc_poj_ewidencja`.`pje_Pojazd` = param1())
            order by `stimulsoft_acc_poj_ewidencja`.`pje_NR` desc
            limit 1) AS `Stan_Koncowy`,
        ((select 
                `stimulsoft_acc_poj_ewidencja`.`pje_LicznikKoncowy`
            from
                `stimulsoft_acc_poj_ewidencja`
            where
                (`stimulsoft_acc_poj_ewidencja`.`pje_Pojazd` = param1())
            order by `stimulsoft_acc_poj_ewidencja`.`pje_NR` desc
            limit 1) - (select 
                `stimulsoft_acc_poj_ewidencja`.`pje_LicznikPoczatkowy`
            from
                `stimulsoft_acc_poj_ewidencja`
            where
                ((`stimulsoft_acc_poj_ewidencja`.`pje_Pojazd` = param1())
                    and (`stimulsoft_acc_poj_ewidencja`.`pje_NR` = 1))
            limit 1)) AS `Stan_PoczEwid`
    from
        `stimulsoft_acc_poj_ewidencja`
    where
        ((`stimulsoft_acc_poj_ewidencja`.`pje_Pojazd` = param1())
            and (`stimulsoft_acc_poj_ewidencja`.`pje_NR` = 1));
With tables and views I removed the references that are unnecessary and are not used for conversions. Replace variables {USER} and {DATABASE} in views on the correct data.
Pawel Kasztelan
Posts: 3
Joined: Fri Mar 28, 2014 8:28 am

Re: MySQL functions and param query

Post by Pawel Kasztelan »

And MySQL function:

Code: Select all

-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`agility`@`%` FUNCTION `param1`() RETURNS int(11)
    NO SQL
    DETERMINISTIC
return @param1
Alex K.
Posts: 6488
Joined: Thu Jul 29, 2010 2:37 am

Re: MySQL functions and param query

Post by Alex K. »

Hello,

The problem is with setting the parameter with the function param1(), it is defined as a parameter of the query itself. As a way, please try to wrap your query into an additional procedure with input parameter.

Thank you.
Attachments
Capture.PNG
Capture.PNG (19.54 KiB) Viewed 2865 times
Post Reply