PHPでSQL文を生成するのは簡単です。 ような何か:
$sql = "select r.hotel, s.id, s.name
from db_subcat s
left join db_restaurant r on s.id = r.subcat
where r.distance";
switch ($hint)
{
case 1:
$sql .= " < 5";
break;
case 2:
$sql .= " between 5 and 10";
break;
case 3:
$sql .= " between 10 and 20";
break;
case 4:
$sql .= " < 20";
break;
}
$res = mysql_query($sql);
たり、同じ問題に純粋なSQLソリューション:
DROP TABLE IF EXISTS `test`.`db_restaurant`;
CREATE TABLE `test`.`db_restaurant` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`hotel` varchar(45) NOT NULL,
`subcat` int(10) unsigned NOT NULL,
`distance` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
insert into test.db_restaurant() values
(1,'Maa',10,15),
(2,'Tprutee',4,1700),
(3,'Tarini',5,10),
(4,'Tasty',10,7),
(5,'sagar',5,21),
(6,'Magar',3,18),
(7,'bagar',5,20),
(8,'duat',4,5);
DROP TABLE IF EXISTS `test`.`db_subcat`;
CREATE TABLE `test`.`db_subcat` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
insert into test.db_subcat values
(3,'Subcat 1'),
(4,'Subcat 2'),
(5,'Subcat 3'),
(10,'Subcat 4');
DROP TABLE IF EXISTS `test`.`db_hint`;
CREATE TABLE `test`.`db_hint` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`data` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
insert into test.db_hint values
(1,' < 5'),
(2,' between 5 and 10'),
(3,' between 10 and 20'),
(4,' > 20');
SELECT * FROM db_hint
where id=2;
select r.hotel, s.id, s.name
from db_subcat s
left join db_restaurant r on s.id = r.subcat
where r.distance > 20;
DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`db_distance` $$
CREATE PROCEDURE `test`.`db_distance` (_hint int)
BEGIN
select data into @h from test.db_hint where id=_hint;
set @s =concat("select r.hotel, s.id, s.name
from db_subcat s
left join db_restaurant r on s.id = r.subcat
where r.distance",@h);
prepare stmt from @s;
execute stmt;
deallocate prepare stmt;
END $$
DELIMITER ;
call db_distance(2);