PHP和MySQL中如何使用condition连接两个表获取数据
我需要一个人帮忙。我需要通过在PHP和Mysql中使用某种条件连接两个表来获取数据。这里的条件有点棘手。让我先解释一下这两个表 德布鲁餐厅: db_子目录: 我需要连接上面两个表,并使用下面给出的某些条件获取PHP和MySQL中如何使用condition连接两个表获取数据,php,mysql,Php,Mysql,我需要一个人帮忙。我需要通过在PHP和Mysql中使用某种条件连接两个表来获取数据。这里的条件有点棘手。让我先解释一下这两个表 德布鲁餐厅: db_子目录: 我需要连接上面两个表,并使用下面给出的某些条件获取subcat\u id和subcat\u name 提示: 20公里=3公里 从上面可以清楚地看出,如果距离,那么在PHP中生成sql语句非常容易。 比如: $sql = "select r.hotel, s.id, s.name from db_subcat s left join db
subcat\u id和subcat\u name
提示:
<5公里=0
5-10公里=1
10-20公里=2
>20公里=3公里
从上面可以清楚地看出,如果距离,那么在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=“选择r.hotel、s.id、s.name
从db_子目录s
左连接s.id=r.subcat上的db_餐厅r
其中r.distance“;
开关($hint)
{
案例1:
$sql.=“<5”;
打破
案例2:
$sql.=“介于5和10之间”;
打破
案例3:
$sql.=“介于10和20之间”;
打破
案例4:
$sql.=“<20”;
打破
}
$res=mysql\u查询($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);
删除表(如果存在)`test`.`db_restaurant`);
创建表'test`.'db_restaurant`(
`id`int(10)无符号非空自动增量,
`瓦查尔酒店(45)非空,
`subcat`int(10)无符号非空,
`距离`int(10)无符号非空,
主键(`id`)
)ENGINE=MyISAM默认字符集=utf8;
插入test.db_()值
(1,'Maa',10,15),
(2,'Tprutee',41700),
(3,'Tarini',5,10),
(4,'Tasty',10,7),
(5,'sagar',5,21),
(6,'Magar',3,18),
(7,'bagar',5,20),
(8,'duat',4,5);
删除表(如果存在)`test`.`db_subcat`);
创建表“test”。“db_subcat”(
`id`int(10)无符号非空自动增量,
`name`varchar(45)不为空,
主键(`id`)
)ENGINE=MyISAM默认字符集=utf8;
插入test.db_子组值
(3,“子类别1”),
(4,“子类别2”),
(5,“子类别3”),
(10,“子类别4”);
删除表(如果存在)`test`.`db_hint`);
创建表'test`.'db_hint`(
`id`int(10)无符号非空自动增量,
`数据'varchar(255)不为空,
主键(`id`)
)ENGINE=MyISAM默认字符集=utf8;
插入test.db_提示值
(1,' < 5'),
(2,'介于5和10'之间',
(3,'介于10和20'之间',
(4,' > 20');
从db_提示中选择*
其中id=2;
选择r.hotel、s.id、s.name
从db_子目录s
左连接s.id=r.subcat上的db_餐厅r
其中r.distance>20;
分隔符$$
放置程序(如果存在)`test`.`db_distance`$$
创建过程'test`.'db\u distance`(提示int)
开始
从test.db\u hint中将数据选择到@h中,其中id=\u hint;
设置@s=concat(“选择r.hotel、s.id、s.name
从db_子目录s
左连接s.id=r.subcat上的db_餐厅r
其中r.距离“,@h);
从@s准备stmt;
执行stmt;
解除分配准备stmt;
结束$$
定界符;
呼叫距离(2);
< 5 km=0
5-10 km=1
10-20 km=2
> 20 km=3
$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);
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);