2012-07-03 4 views
0

Possible Duplicate:
UNION query with codeigniter's active record patternCodeigniter에서 SQL 쿼리를 어떻게 조합합니까?

나는 다음과 같은 코드가 있습니다

$language_id=$this->get_language_id($language_code); 
$english_id=$this->get_language_id('en'); 
$query="SELECT e.label_value, t.user_id, t.votes, t.approved, t.language_value FROM labels e left outer join labels t on e.label_value=t.label_value WHERE e.language=$english_id and t.language=$language_id and (t.approved=1 or t.user_id=$user_id) and e.label_value in (select distinct label_value from labels WHERE language=$english_id order by label_value limit $start_index, 30) order by e.label_value, t.votes"; 
$query=$this->db->query($query); 
$data=$query->result_array(); 

을하지만 다음과 같은 오류를 가지고있다 :

This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 

그래서, 내가 다른 쿼리에서 folowoing 부분 "select distinct label_value from labels WHERE language=$english_id order by label_value offset $start limit 30" 할 필요가있다. 제발, CodeIgniter를 사용하여 어떻게 할 수 있습니까?

UPDATE :

있습니다 테이블 labels

(label_value, language_value, language) - PK, 
user_id, 
timestamp, 
approved, 
votes 

내가이 테이블에서 모든 쿼리를 얻을 필요가 레이블, 전자 t.label_value으로 (예를 들어, 이름이 t 및 전자입니다입니다) .label_value (같은 레이블), t.language = 45 (영어), e.language = 24 (내 언어) .label_value (존재), e.user_id, e.votes, e.timestamp 여기서 t.label_value = e.label_value 및 (e.user_id = 121234 또는 e.approved = 1). 하지만 모든 항목이 필요하고 if (t.label_value! = e.label_value) NULL 입력란을 사용하여이 항목을 가져와야합니다.

답변

0

이것은 PHP 나 CI가 아닌 MySQL의 제한 사항입니다. 이 파생 테이블이된다 그래서 해결하기 위해, 당신은 별칭 하위 쿼리에서 서브 쿼리를 포장해야 내가 그 일을 생각

$language_id = $this->get_language_id($language_code); 
$english_id = $this->get_language_id('en'); 
$query = " 
    SELECT e.label_value, t.user_id, t.votes, t.approved, t.language_value 
    FROM labels e 
    LEFT OUTER JOIN labels t on e.label_value=t.label_value 
    WHERE 
    e.language = $english_id 
    AND t.language = $language_id 
    AND (t.approved = 1 OR t.user_id = $user_id) 
    AND e.label_value IN (
     SELECT label_value 
     FROM (
     SELECT DISTINCT label_value 
     FROM labels 
     WHERE language = $english_id 
     ORDER BY label_value 
     LIMIT $start_index, 30 
    ) i 
    ) 
    ORDER BY e.label_value, t.votes 
"; 
$query = $this->db->query($query); 
$data = $query->result_array(); 

, 내가 그것을하지 알고하지 말자 나는 것 그것을 다시 한번 살펴 보라.

내가 더 이런 식으로 뭔가있을 것 같아요 정확히 당신이 시도되지만, 운동 약간의 어려움을 겪고있어

편집 :이 여전히 경우

SELECT t.label_value, t.user_id, t.votes, t.approved, t.language_value 
FROM (
    SELECT DISTINCT label_value 
    FROM labels 
    WHERE language = $english_id 
) e 
LEFT JOIN labels t ON e.label_value = t.label_value 
WHERE 
    t.language = $language_id 
    AND (t.approved = 1 OR t.user_id = $user_id) 
ORDER BY t.label_value, t.votes 
LIMIT $start_index, 30 

잘못된 일부 예제 행과 그 행에서 검색하려는 결과 집합을 표시하십시오.

+0

죄송 합니다만,이 요청은 모든 문자열을 반환하지 않습니다. – user1477886

+0

그런 다음 쿼리가 올바르지 않습니다. 테이블의 레이아웃과 샘플 데이터를 보여 주실 수 있습니까? 그리고 테이블에서 얻으려는 결과는 무엇입니까? 나는 당신이 테이블 자체에 조인했고이 값들이 달라야한다는 것을 지정하고 있기 때문에 문제를 일으킬 것 인 e.language = $ english_id와 t.language = $ language_id'라는 느낌이 들지만 어떤 데이터를 보지 않고 어디로 가야하는지, 그리고 그 데이터로 무엇을하기를 희망하는지 알기가 어렵습니다. – DaveRandom

+0

물론입니다. 2 분 안에 질문을 업데이트하겠습니다. – user1477886

관련 문제