我想获得将多个表连接成一行并从t_cuisine表中获取多个cuisine_name的结果,并使用php(CODEIGNITER)获取t_search.cuisineId列中的cuisine_id并加入
t_search table来获取美食这样我就可以通过cuisineId获得可用的美食名称。
t_search table
searchID|restaurant_name|cuisineId
1 | XYZ | 1,4,5
2 | KIH | 2
3 | GHY | 4,5
4 | UIO | 1,2,3
5 | RTY | 3,5
t_cuisine table
cuisineId|cuisine_name
1 | ABC
2 | CDE
3 | EFG
4 | GHZ
5 | HJL
在我使用的模型中
$this->db->select('*');
$this->db->from('t_search');
$this->db->join('t_cuisine','t_cuisine.cuisineId = t_search.cuisineId');
仅根据t_search中的cuisineId中的单个值获取数据。
答案 0 :(得分:1)
$this->db->select('*');
$this->db->from('t_search');
$this->db->join('t_cuisine','t_cuisine.cuisineId IN(t_search.cuisineId)');
$this->db->where('t_cuisine.cuisineId', X);
将X更改为您要寻找的美食ID
答案 1 :(得分:0)
您之前所拥有的(当您的查询基于cuisineId
中的单个值工作时)是一对多的关系。像这样的加入效果很好,因为每次搜索都有一种美食。
这是一个多对多关系,这个表结构doesn't support it well。您不需要在cuisineId
表的t_search
列中存储分隔列表,而是需要另一个表来表示搜索和菜肴之间的关系,如下所示:
t_search_cuisine table
searchID|cuisineId
1 | 1
1 | 4
1 | 5
2 | 2
3 | 4
3 | 5
4 | 1
4 | 2
4 | 3
5 | 3
5 | 5
然后,您应该能够通过一次额外的加入来获取所有数据。
$this->db->select('*');
$this->db->from('t_search');
$this->db->join('t_search_cuisine','t_search.searchID = t_search_cuisine.searchID');
$this->db->join('t_cuisine','t_search_cuisine.cuisineId = t_cuisine.cuisineId');
答案 2 :(得分:0)
根据表格的结构,加入这些表格并不容易。也许你可以用两个查询代替。
$this->db->select("cuisineId");
$this->where("searchID", $searchID);
$qry1 = $this->db->get("t_search");
$res1 = $qry1->row_array();
$qry1->free_result();
if ($res1) {
$this->db->select("*");
$this->db->where_in('cuisineId', $res1);
$qry2 = $this->db->get("t_cuisine");
$res2 = $qry2->result();
return ($res2) ? $res2 : false;
}