douqihou7537 2015-12-10 08:17
浏览 39

如何通过join table的单词进行搜索,并通过cakephp从连接表中获取所有相关数据

My Circumstance: php 5.1.6 cakephp 1.3

I have a Restaurant table whose structure is like bellow.

id       name        
1    Italian_resto
2    French_resto
3    Japanese_resto

I also have a RestaurantsTag table whose structure is like bellow.

id   restaurant_id  type       tag      
1         1         area     Firenze
2         1     genre    Italian
3         2         area     Paris
4         2         genre    French
5         3         area     Tokyo
6         3         genre    Japanese

These two table can be joined by Restaurant.id and RestaurantsTag.restaurant_id. Then, I'd like to get all the tags which belong to Italian_resto when I search tags by "Italian". In other words, when I search tag by 'Italian', I'd like to get 'Italian' and 'Firenze' whose restaurant_ids are both 1 . The result I want is bellow.

array(1) {
  [0]=>
  array(2) {
    ["Restaurant"]=>
    array(4) {
      ["id"]=>
      string(1) "1"
      ["name"]=>
      string(27) "Italian_resto"

    }
    ["RestaurantsTag"]=>
    array(2) {
      [0]=>
      array(2) {
        ["type"]=>
        string(5) "genre"
        ["tag"]=>
        string(12) "Italian"
      }
      [1]=>
      array(2) {
        ["type"]=>
        string(4) "area"
        ["tag"]=>
        string(6) "Firenze"
      }
    }
  }
}

The result bellow is also welcome.

array(1) {
  [0]=>
  array(2) {
    ["Restaurant"]=>
    array(4) {
      ["id"]=>
      string(1) "1"
      ["name"]=>
      string(27) "Italian_resto"

    }
    ["RestaurantsTag"]=>
    array(2) {
      [0]=>
      array(2) {
        ["type"]=>
        string(5) "genre"
        ["tag"]=>
        string(12) "Italian"
      }
    }
  }
  [1]=>
  array(2) {
    ["Restaurant"]=>
    array(4) {
      ["id"]=>
      string(1) "1"
      ["name"]=>
      string(27) "Italian_resto"

    }
    ["RestaurantsTag"]=>
    array(2) {
      [0]=>
      array(2) {
        ["type"]=>
        string(5) "area"
        ["tag"]=>
        string(12) "Firenze"
      }
    }
  }

}

How can I achieve that by one query in cakephp 1.3? If It is not possible, how can I achieve that by the simplest queries?

  • 写回答

2条回答 默认 最新

  • douchuifk90315 2015-12-10 09:33
    关注

    Based on the required input and output something like this is possibly what you want.

    SELECT rt.res_id, rt.`type`, rt.tag, r.res_name FROM
    restaurants_tag rt
    JOIN 
        (SELECT res_id FROM restaurants_tag WHERE tag="Italian") d 
    ON d.res_id = rt.res_id 
    JOIN restaurant r ON d.res_id = r.id;
    
    |res_id |type   |tag        |res_name
    |-------|-------|-----------|------------
    |1      |area   |Firenze    |Italian_resto
    |1      |genre  |Italian    |Italian_resto
    

    Feel free to revert if this is not what you want.

    评论

报告相同问题?

悬赏问题

  • ¥15 关于Lammps建模的描述
  • ¥15 #lingo#请问一下为什么会出现以下情况,是因为l第一个值是0的缘故吗?
  • ¥15 设计格雷码同步八进制计数器
  • ¥100 改写matlab程序(关键词-系统对)
  • ¥15 函数信号发生器仿真电路
  • ¥15 Qt的pixmap和image图片加载都导致程序崩溃怎么办
  • ¥15 Kali木马生成问题求解
  • ¥30 求一下解题思路,完全不懂
  • ¥15 C51单片机串口控制JQ6500语音模块
  • ¥30 想给yolo5模型加一个图片识别界面,但是图片还没有检测出来就闪退了