코드 점화기에서 mysql AND OR 쿼리 결합
CI에서 AND 또는 mysql 쿼리를 결합하고 싶습니다.저는 이미 이 스레드를 보았습니다: http://codeigniter.com/forums/viewthread/92818/ .하지만 그들은 거기서 정확한 해결책을 제시하지 않습니다.
CI 프레임워크를 엄격하게 사용하여 다음 쿼리를 생성하려면 어떻게 해야 합니까?(대괄호 없이도 쉽게 쿼리를 만들 수 있지만 동일한 쿼리가 아닙니다.)
SELECT * FROM `Persons` WHERE
LastName='Svendson' AND Age="12" AND
(FirstName='Tove' OR FirstName='Ola' OR Gender="M" OR Country="India")
추신: 이건 말이 안 된다고 해도 샘플 쿼리일 뿐입니다. 쿼리의 전체 OR 부분을 하나의 쿼리 안에 쓰는 것을 제안하지 마십시오.where()
.
EDIT: 기본적으로 다음과 같은 간단한 쿼리를 구현하고자 합니다.
SELECT * FROM `table` WHERE field1='value1' AND (field2='value2' OR field3='value3')
CodeIgniter 3에는 이러한 목적을 위해 정확히 기능하는 새로운 메서드 group_start() 및 group_end()가 있습니다.
return $this->db
->where('LastName', 'Svendson');
->where('Age', 12);
->group_start()
->where('FirstName','Tove')
->or_where('FirstName','Ola')
->or_where('Gender','M')
->or_where('Country','India')
->group_end()
->get('Persons')
->result();
이게 먹힐까요?
$this->db->where('LastName', 'Svendson');
$this->db->where('Age', 12);
$this->db->where("(FirstName='Tove' OR FirstName='Ola' OR Gender='M' OR Country='India')", NULL, FALSE);
$query = $this->db->get('Persons');
return $query->result();
code igniter 3.0 framework를 사용하여 별도 또는 장소 및 장소 조작을 위한 새로운 기능이 있습니다.즉, 그룹별 및 그룹단
암호처럼...
$this->db->where('LastName', 'Svendson');
$this->db->where('Age', 12);
$this->db->group_start();
$this->db->or_where('FirstName','Tove');
$this->db->or_where('FirstName','Ola');
$this->db->or_where('Gender','M');
$this->db->or_where('Country','India');
$this->db->group_end();
$query = $this->db->get('Persons');
return $query->result();
간단하게 사용하실 수 있습니다.
$this->db->where("status","live")->or_where("status","dead");
사용할 수도 있습니다.
$this->db->where("(status='live' OR status='dead')");
코드 점화기에서는 이와 같이 쉽게 이해할 수 있습니다.
$sql = "SELECT
*
FROM
`Persons`
WHERE
LastName = 'Svendson'
AND Age = '12'
AND (
FirstName = 'Tove'
OR FirstName = 'Ola'
OR Gender = 'M'
OR Country = 'India'
)";
$query = $this->db->query($sql);
return $query->result();
사용해보기Query grouping
링크 포 잇
http://www.codeigniter.com/userguide3/database/query_builder.html#query-grouping
현재 CI2에서는 데이터베이스 클래스를 확장하고 메서드의 액세스 유형을 비공개에서 공개/보호로 변경하지 않으면 데이터베이스 클래스의 쿼리 작성기 메서드($this->db->_compile_select())에 액세스할 수 없습니다. 그러면 ActiveRecord 클래스를 사용하여 빌드하려는 것과 같은 Subquery를 빌드할 수 없습니다.당신이 구축하려는 서브쿼리와 같은 서브쿼리를 만드는 유일한 방법은 db 쿼리 방법을 사용하는 것뿐입니다.
$table = $this->db->dbprefix('tablename');
$sql = "SELECT * FROM `{$table}` WHERE field1='?' AND (field2='?' OR field3='?') ";
$this->db->query($sql,array($field1,$field2,$field3));
CI Subquery에서 이 작업을 수행하는 것에 대한 블로그 게시물이 있었지만 그것은 구식이고 CI 1.7 Hope에서만 작동합니다. 약간의 도움이 됩니다.
CodeIgniter 2를 위해 이것이 필요했지만 여전히 값이 빠져나가야 했기 때문에 csotelo의 답이 나에게 좋지 않았고 Shawn C의 답처럼 전체 쿼리를 다시 쓰고 싶지 않아서 결국 이렇게 되었습니다.
$this->db->where('LastName', $lastName);
$this->db->where('Age', $age, false);
$this->db->where('1 AND ( 0', null, false); // This one starts the group
$this->db->or_where('FirstName', $firstName1);
$this->db->or_where('FirstName', $firstName2);
$this->db->or_where('Gender', $gender);
$this->db->or_where('Country', $country);
$this->db->or_where('0 )', null, false); // This one ends the group
$query = $this->db->get('Persons');
그러면 다음과 같은 쿼리가 생성됩니다.
SELECT *
FROM (`Persons`)
WHERE `LastName` = 'Svendson'
AND Age = 12
AND 1 AND ( 0 -- This one starts the group
OR `FirstName` = 'Tove'
OR `FirstName` = 'Ola'
OR `Gender` = 'M'
OR `Country` = 'India'
OR 0 ) -- This one ends the group
이것과 같은 것은 다음과 같습니다.
SELECT * FROM (`Persons`) WHERE
`LastName` = 'Svendson' AND Age = 12 AND 1 AND
(0 OR `FirstName` = 'Tove' OR `FirstName` = 'Ola' OR `Gender` = 'M' OR `Country` = 'India' OR 0)
쿼리 자체가 말이 안 돼요. 선택한 항목은 다음과 같습니다.
- 토브 스벤슨, 12살
- 올라 스벤센(Ola
- 스벤드슨이라는 남자는 12살이고
- 스벤슨이라는 이름의 인도 출신자는 누구나 12살입니다.
토브는 남자 이름 같아서 굳이 성별을 선택할 필요가 없습니다.올라는 여자 이름 같아서 성별을 정하는 것이 불필요할 뿐만 아니라 말도 안 됩니다.당신의 질문은 스벤슨이라는 이름의 12살 남자와 스벤슨이라는 이름의 12살 인도 남자, 그리고 토브와 올라 스벤슨이 12살이라면 돌려줄 것입니다.
대괄호 사이에 끼우고 싶지 않은 이유가 무엇입니까?어떤 이유에서인지 현역 기록으로 해내고 싶으십니까?
언급URL : https://stackoverflow.com/questions/11056303/combining-mysql-and-or-queries-in-codeigniter
'code' 카테고리의 다른 글
Python Requests 라이브러리에서 기본 HTTP 인증을 사용하려면 어떻게 해야 합니까? (0) | 2023.10.30 |
---|---|
angular2에서 타이머를 만드는 방법 (0) | 2023.10.30 |
jQuery 체크 ifjQuery 체크 if존재하며 값을 갖습니다.존재하며 값을 갖습니다. (0) | 2023.10.30 |
자바스크립트 배열을 사용하여 집합 차이를 계산하는 가장 빠르고 우아한 방법은 무엇입니까? (0) | 2023.10.30 |
아콘다 루트 환경 재설정 방법 (0) | 2023.10.30 |