2016-07-09 13 views
0

私は助けが必要です。私はPHPとMySQLのいくつかの条件を使用して2つのテーブルに参加してデータを取得する必要があります。ここで条件はちょっと難しいです。最初に2つのテーブルを説明しましょう。PHPとMySQLの条件を使用して2つのテーブルを結合してデータを取得する方法

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 

Iは上記の二つのテーブルを結合し、以下に示すいくつかの条件を用い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ことをクリアすることができますから。ここでは、ユーザがあるだけで、入力$距離= 0または$距離= 1または$距離= 2または$距離= 3必要data.Overall私の要件を取得するためにされているとユーザーが入力$distance=2ので、すべてのサブカテゴリ名とidが内フェッチすべきを持っていますdb_restaurantテーブルからの距離10-20などです。私を助けてください。

答えて

0

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); 
関連する問題