1
codeigniter CXTags 태그 라이브러리를 사용하는 응용 프로그램이 있습니다. 다음과 같이PHP : 활성 레코드 테이블 조인
데이터베이스 구조는 다음과 같습니다
게시물
ID
이 ROW_ID tags_ref
테이블
는
을 tag_id태그
ID
safe_tag
태그
$의 safe_tag 다음 post.id = tags_ref.row_id에 tags_ref 가입 null가 아닌 경우, 내 쿼리는 기본적으로 간다 , tags_ref.tag_id = tags.id에 태그를 결합하십시오. 여기서 tags_ref.table = 'posts'및 tags.safe_tag = 'food'
SELECT * FROM posts
JOIN tags_ref ON posts.id = tags_ref.row_id
JOIN tags ON tags_ref.tag_id = tags.id
WHERE tags.safe_tag = $safe_id
아쉽게도 활성 레코드에 작성한 쿼리가 제대로 작동하지 않습니다. £ safe_tag이 null 일 때 쿼리가 완벽하게 작동하지만 잘못된 결과를 얻지 못할 때 쿼리가 제대로 작동합니다.
SELECT *
FROM (`posts`)
INNER JOIN `tags_ref` ON `posts`.`id` = `tags_ref`.`row_id`
INNER JOIN `tags` ON `tags_ref`.`tag_id` = `tags`.`id`
WHERE `tags_ref`.`table` = 'posts'
AND `tags`.`safe_tag` = 'food'
AND `posts`.`city_id` = '2'
누군가가 모습을 가질 수 있습니다 : 여기
function get_posts($id = NULL, $safe_tag = NULL) {
if($safe_tag != NULL){
echo $safe_tag;//debugging
$table = 'posts';
$this->db->join('tags_ref', 'posts.id = tags_ref.row_id');
$this->db->join('tags', 'tags_ref.tag_id = tags.id');
$this->db->where('tags_ref.table', $table);
$this->db->where('tags.safe_tag',$safe_tag);
}
//if an id was supplied
if ($id != NULL) {
$this->db->where('posts.city_id',$id);
}
// execute query
$query = $this->db->get('posts');
...
은에 프로파일 링 쿼리입니까? 나는 그것에 눈의 신선한 세트가 필요하다고 생각.
«불행하게도 내가 활성 기록에 작성한 쿼리가 제대로 fuctioning되지»내부 쿼리를 실행하는 것을 잊었다 - 오류 또는 예기치 않은 데이터 집합을 반환? 실행하기 전에 $ this-> db로 SQL 쿼리를 문자열로 볼 수 있습니까? –
CI Active Record 클래스는 매우 제한적이며 업데이트 및 삽입에만 사용됩니다. 그것 이외에는 $ db-> query ("SELECT * FROM table WHERE id =?", array ($ id))를 사용하십시오. 코드에서 추가 조인 절을 수행하는 것처럼 보이지만 활성 레코드 쿼리를 구문 분석하기 위해 서버에 추가로드가 발생하지 않는 것처럼 손상되지 않아야합니다. 죄송합니다.이 질문에 정말로 답변하지 않는다는 것을 알고, 단지 내 생각을 나누고 싶었습니다. – Naatan
그런데 프로파일 링을 켜서 실행 된 쿼리를 볼 수 있습니다 (http://codeigniter.com/user_guide/general/profiling.html). – Naatan