2012-07-03 98 views
0

Possible Duplicate:
UNION query with codeigniter's active record pattern如何在Codeigniter中使用union 2 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和E)與標籤t.label_value,E .label_value(is exists),e.user_id,e.votes,e.timestamp其中t.label_value = e.label_value(相同標號),t.language = 45(英文),e.language = 24(我的語言)和(e.user_id = 121234或e.approved = 1)。但我需要所有條目,並且如果(t.label_value!= e.label_value),我需要使用NULL字段獲取此條目。

回答

0

這是MySQL的限制,而不是PHP或CI。爲了避開它,你需要用你的子查詢在別名子查詢,以便它成爲一個派生表:

$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 AND t.language = $ language_id'會導致這個問題,因爲你已經將表加入到它自己,並且你指定這些值應該是不同的,但它是很難知道去哪裏而沒有看到一些數據以及你希望如何處理它。 – DaveRandom

+0

當然。我會在2分鐘內提出問題更新。 – user1477886