2012-12-05 28 views
1

我有兩個變量,$take(限制)和$skip(偏移量),它們是mysql中限制子句的值。CodeIgniter活動記錄偏移量沒有限制?

現在代碼點火器它是限制條款倒退。

E.g.

$this->db->limit(5,10)將在MYSQL中產品LIMIT 10, 5

無論如何,我很難弄清楚如何根據設置的兩個值中的哪一個來調用limit函數。

基本上,

如果它們都設置我想打電話給

$this->db->limit($take, $skip)

如果只有$take設爲我想打電話給

$this->db->limit($take)

但我什麼如果只撥打$skip is set, e.g. if $ skip = 10`,那麼我想顯示所有行,除第一個10

我稱

$this->db->limit(null, $skip)
$this->db->limit(0, $skip)
$this->db->limit(false, $skip)
完全不同的東西?

回答

4

我想你通過回答我們自己的問題找到了你正在尋找的答案,但是如果你想使用codeigniter來獲取除第一個10以外的所有行,那麼你需要做類似的事情(我還沒有測試它):

$this->db->limit(18446744073709551615, 10) 

根據Mysql Documentation

To retrieve all rows from a certain offset up to the end of the result set, you can use some large number for the second parameter. 
+0

是啊,這是正確的,我通過源代碼看起來:)但是,你的答案的作品,如果你只想使用記錄功能。 – Hailwood

+0

哈哈。使用文檔化功能是從2000年開始的);)。我小子。嚴肅地說,也許在下一個CI版本中,他們刪除了訪問這個未公開的功能。總是存在這樣的風險 –

+2

是的,同樣,原來偏移量函數是沒用的:/偏移量函數設置了這個值,但是,除非實際上有一個限制,否則偏移量不會被應用。考慮提交補丁......因此,你的答案會得到Tick,但我可能會用'PHP_INT_MAX'代替'18446744073709551615',因爲我嚴格地說,它消除了「這個數字意味着什麼?!?」的含糊性。對於未來的開發者來說,這暗示着,我們不在乎數字是什麼,我們只是想要一個大數字! – Hailwood

1

結果Code Igniter有一個未公開的offset函數。

/** 
* Sets the OFFSET value 
* 
* @param integer the offset value 
* @return object 
*/ 
public function offset($offset) 
{ 
    $this->ar_offset = $offset; 
    return $this; 
} 

所以只需撥打$this->db->offset($skip)就行了!