![](/img/trans.png)
[英]Query to fetch multiple data by joining multiple tables using PHP and MySQL
[英]How to fetch data by joining two table using condition in PHP and MySQL
我需要一個幫助。 我需要通過使用 PHP 和 Mysql 中的某些條件連接兩個表來獲取數據。 這里條件有點棘手,我先來解釋一下這兩個表。
db_restaurant:
member_id hotel_name subcat_id distance
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
db_subcat:
subcat_id subcat_name
3 subcat1
4 subcat2
5 subcat3
10 subcat4
我需要加入上面兩個表並使用下面給出的一些條件獲取subcat_id and subcat_name
。
提示:
< 5 km=0
5-10 km=1
10-20 km=2
> 20 km=3
從上面可以看出, if distance is <5 KM then index is 0 ,distance is 5-10 KM index is 1 and so on
。 這里用戶只有輸入 $distance=0 或 $distance=1 或 $distance=2 或 $distance=3 來獲取所需的數據。總的來說,我的要求是假設用戶輸入了$distance=2
所以所有子類別名稱和 id 應該從db_restaurant
表等距離10-20
范圍內獲取。 請幫我。
在 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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.