2017-12-25 33 views
2

내가 CodeIgniter의를 사용하여 쉼표가 where_not_in 쿼리에서 사용하는 모델에 내 컨트롤러에서 목록을 분리 통과하려고 모델 컨트롤러에서 분리 된 목록. 쉼표로 구분 된 목록을 만들려면 다음 코드가 있습니다.전달 쉼표

$mnames = Array(); 
foreach($facet_group['manufacturer_name'] as $u) $mnames[] = $u['value']; 
$manufacturer_list = implode(",",$mnames); 

알카텔, 애플, 화웨이, LG, 마이크로 소프트, 모토로라, 노키아, 삼성, 소니.

$this->db->select('name'); 
$this->db->from('wl_manufacturers'); 
$this->db->where('active', 1); 
$this->db->where('supplier_type', 'product'); 
$this->db->where_not_in('name', $str); 

$ str을 쉼표 목록을

를 분리되는 프로파일 러의 출력은 다음과 같습니다 : 주위에 작은 따옴표가 없기 때문에

SELECT `name` 
FROM `wl_manufacturers` 
WHERE `active` = 1 
AND `supplier_type` = 'product' 
AND `name` NOT IN('Alcatel,Apple,Huawei,LG,Microsoft,Motorola,Nokia,Samsung,Sony') 

이 작동하지 않는 것 내 질문은 이것이다 목록의 각 항목 그러나 나는 다음과 같이 수동으로 목록을 작성하는 경우 : $ 배열 = 배열 ​​('알카텔', '애플', '화웨이', 'LG', '마이크로 소프트', '모토로라', '노키아', '삼성', '소니'). 그것은 작동하고 프로파일 러의 출력은 다음과 같습니다 나는 모델에 전달하기 전에 목록 항목을 구분 쉼표에 작은 따옴표를 추가하는 시도

SELECT `name` 
FROM `wl_manufacturers` 
WHERE `active` = 1 
AND `supplier_type` = 'product' 
AND `name` NOT IN('Alcatel', 'Apple', 'Huawei', 'LG', 'Microsoft', 'Motorola', 
'Nokia', 'Samsung', 'Sony') 

:

$str = "'" . implode ("', '", $mnames) . "'"; 

하지만 프로파일 출력은 이것이다 :

SELECT `name` 
FROM `wl_manufacturers` 
WHERE `active` = 1 
AND `supplier_type` = 'product' 
AND `name` NOT IN('\'Alcatel\', \'Apple\', \'Huawei\', \'LG\', \'Microsoft\', 
\'Motorola\', \'Nokia\', \'Samsung\', \'Sony\'') 

역 슬래시가 추가되어 다시 작동하지 않습니다. 그래서 질문은 어떻게 쉼표로 구분 된 목록을 만들어 내 모델로 전달하고 쿼리가 올바르게 작동하도록 할 수 있습니까?

답변

1

당신은

$arr=explode (',',$str) 

은 다음

$this->db->where_not_in('name', $arr); 

explode

처럼 쿼리에서 사용할 수있는 배열을 만들려면 쉼표로 구분 된 문자열 ($ str을)를 폭발해야 및 CI의 where_not_in()

+0

http://php.net/manual/en/function.str-getcsv.php 답 후, 감사합니다, 나는, 행복한 휴일을 도울 수 있도록 배열 큰 – David

+0

를 쿼리에 쉼표로 구분 된 문자열을 전달하지 알게되었다 ... – Vickel

0

문자열이 전달되면 $this->db->where_not_in, 그것으로 동일한, 값의 배열을 기대 ... 또는 것 같다 한 항목의 배열 인 문자열을 전달합니다. 당신이 배열을 시작하는 경우

그래서, 단지 where_not_in에 그것을 전달합니다. 그러나 CSV 문자열로 시작하는 경우 str_getcsv(my_string_of_csv) 배열을 얻으려면 where_not_in에 전달하면됩니다.

참고 : CSV 문자열에 공백, 이스케이프 문자 및/또는 인용 값이 포함될 수있는 경우 str_getcsv을 사용하고 단지 explode을 사용하지 않으려합니다. 참조 :