我有表T1
和T2
。在T1
中,我的列cat_id
具有由commma分隔的数组中的整数值,例如
row1=1; row2=1,41; row3=40,1
在T2
中,我的列ID具有单个整数值,例如
row1=1; row2=40; row3=41; row4=0
现在,根据从T2
中选择的ID,我需要来自T1
的数据。
我的问题是如何在T1
中应用条件。我正在使用CodeIgniter。我试过这样的。
$this->db->select('*');
$this->db->where('status', 'yes');
$this->db->where('cat', '1');
$this->db->like('category_id', '1');
$this->db->or_like('category_id', ',1');
$this->db->or_like('category_id', '1,');
$this->db->get('T1')->result_array();
但问题仍然存在于id = 1
,如果T1
中的数据为51,5,它也会被选中。
我该如何解决这个问题。提前谢谢
答案 0 :(得分:1)
尝试使用FIND_IN_SET
SELECT
*
FROM T1
LEFT JOIN T2 on FIND_IN_SET(T2.id, T1.cat_id)
WHERE T1.status = 'yes' AND T2.cat = 1
如果您认为额外的记录即将到来,您可以使用INNER JOIN而不是LEFT JOIN。 在COdeigniter
$sql_query = "
SELECT
*
FROM T1
LEFT JOIN T2 on FIND_IN_SET(T2.id, T1.cat_id)
WHERE T1.status = 'yes' AND T2.cat = 1
";
$this->db->query($sql_query);
答案 1 :(得分:0)
关于上述问题,使用in_array()也有帮助。
$this->db->select('cat_id');
$row = $this->db->get('T1')->result_array();
$list = array();
foreach($row as $ind=>$val){
$c_id = explode(',', $row['cat_id);
if(in_array('1', $c_id){
array_push($list, $val)
}
}