2016-07-09 11 views
0
verbindet

Ich benötige eine Hilfe. Ich muss Daten holen, indem ich zwei Tabellen unter Verwendung einiger Bedingung in PHP und in Mysql zusammenfüge. Hier sind die Bedingungen etwas knifflig. Lassen Sie mich zuerst die beiden Tabellen erklären.Wie man Daten holt, indem man zwei Tabelle unter Verwendung Bedingung in PHP und in 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 

Ich brauche die beide oben genannte Tabelle zu verbinden und die subcat_id and subcat_name mit einiger Bedingung holen, die unten gegeben wird.

Hinweise:

< 5 km=0 
5-10 km=1 
10-20 km=2 
> 20 km=3 

Aus dem Vorstehenden kann man erkennen, if distance is <5 KM then index is 0 ,distance is 5-10 KM index is 1 and so on gelöscht werden. Hier hat der Benutzer nur die Eingabe $ distance = 0 oder $ distance = 1 oder $ distance = 2 oder $ distance = 3, um die erforderlichen Daten zu holen.Gesamt meine Anforderung lautet, dass der Benutzer $distance=2 eingegeben hat, so dass alle Unterkategorie Name und ID innerhalb der abrufen sollte Abstand 10-20 von der db_restaurant Tabelle und so weiter. Bitte hilf mir.

Antwort

0

Das ist ziemlich einfach zu SQL-Anweisungen in PHP zu generieren. Etwas wie:

$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); 

Oder eine reine SQL-Lösung für das gleiche Problem:

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); 
Verwandte Themen