Пытаюсь воспроизвести работу этого куска кода в хранимой процедуре: PHP: <? $query="SELECT * from `worker` WHERE spec='".$serch."' "; if($_GET['money']!=''){ $money=Neutralize($_GET['money']); $query.="AND money='".$money."' "; } if($_GET['city']!=''){ $city=Neutralize($_GET['city']); $query.="AND city='".$city."' "; } $query.=" LIMIT ".$pager.",".$finish; ?> Что наваял: [sql]CREATE PROCEDURE `Job`(IN Serch VARCHAR(22) IN Pager INT IN Finish INT IN Money INT(50) IN City VARCHAR(22)) BEGIN SELECT * FROM `worker` WHERE spec=Serch AND money=Money AND city=City LIMIT Pager,Finish; END[/sql] Создать процедуру пытаюсь в phpmyadmin выбрав нужную базу данных, выдает ошибку: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN Pager INT IN Finish INT IN Money INT(50) IN City VARCHAR(22)) BEGIN SELEC' at line 1 подскажите пожалуйста как правильно создать процедуру и как реализовать что то типа isset т.е. если переменная задана использовать 1 запрос, а если нет то другой , как в php скрипте выше
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[sql]Pager INT Finish INT Money INT(50) City VARCHAR(22)) BEGIN SELECT * FROM `wo[/sql]' at line 1 оставил 1 IN вначале...
теперь ругается на [sql]LIMIT Pager,Finish[/sql] [sql]CREATE PROCEDURE `Job`(IN Serch VARCHAR(22),IN Pager INT(20),IN Finish INT(20),IN Money INT(50),IN City VARCHAR(22)) BEGIN SELECT * FROM `worker` WHERE spec=Serch AND money=Money AND city=City LIMIT Pager,Finish; END[/sql]
на самом деле, там все не настолько однозначно. можно использовать подготовленные выражения или пользовательскіе переменные.
Костян не нашел ни 1 мануала по хранимым процедурам, где бы LIMIT задавался переменной только если DECLARE, а у меня она все время разная будет
вот, уж, не знаю в каких интернетах ты исках… http://dbaspot.com/forums/mysql/378711- ... limit.html http://forums.mysql.com/read.php?98,69465,69817 http://forge.mysql.com/tools/tool.php?id=13
Ну почему же всю жизнь, главное уметь искать. http://www.sql.ru/forum/actualthread.aspx?tid=287126#2630694
Goryn спасибо, оказывается не все так просто было) [sql]CREATE PROCEDURE `rd_userlog`(IN _START INTEGER, IN _LIMIT INTEGER) begin PREPARE STMT FROM "SELECT * FROM `userlog` ORDER BY `userlog`.`UserlogID` DESC limit ?,?"; SET @START = _START; SET @LIMIT = _LIMIT; EXECUTE STMT USING @START, @LIMIT; end[/sql]