簡體   English   中英

如何通過在 PHP 和 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM