2017-02-28 77 views
0

我在設置限制的腳本的早期有一個查詢。可以修改現有的MySQL查詢嗎?

例子:

$row = mysqli_query($db,"SELECT id FROM table ORDER BY id DESC LIMIT 5"); 

「5」永遠是正確的 - 但有一個插件,我的建築,需要從「5」改變限制爲「2」(一次性特殊情況)。

我可以將$ row更改爲新的查詢,然後調用函數來獲取結果 - 但我寧願更改現有的查詢。

喜歡的東西:

$row .= "LIMIT 2" 

或者:

​​

或者:

$row < "LIMIT 2" 

當然這些都不工作的 - 這也可能是不可能的,因爲查詢設置 - 但它不會傷害要求。

感謝所有


只是一個快速的注意 - 這是兩個單獨的文件。文件A根據環境設置正確的查詢並容納使用查詢的函數。文件B調用輸出查詢的函數(因此我可以在文件B中的函數調用之前更改查詢)。是的,有這樣設置的原因。

+0

如果你想減少$行,你可以在循環讀取,如果性能不重要,實際代碼中的'2'和'5'如此接近! – MohaMad

+0

「5」是用戶可以設置爲高數的變量(5是默認值)。該插件只需要前兩行。當你說'閱讀循環'時,你的意思是一個while()? – Pear

+0

是的,我調用'while(){}'用於逐行讀取行的讀取循環... @ user3925824 – MohaMad

回答

2

你在正確的軌道上,但你必須改變查詢字符串之前,它的功能。因此,爲它做一個變量

$query = "SELECT id FROM table ORDER BY id DESC "; 

然後,然而,你希望,做一些增加了這個限制。在我的例子中,如果聲明

if ($this == "this") { 
    $query .= "LIMIT 5"; 
} else { 
    $query .= "LIMIT 2"; 
} 

然後餵它mysqli的

$row = mysqli_query($db, $query); 

編輯

我看了你的筆記和註釋。你的情況5.

function yourFunction($limit = 5) { 
    $query = "SELECT id FROM table ORDER BY id DESC LIMIT " . $this; 
    $row = mysqli_query($db, $query); 
} 

默認情況下,只調用yourFunction()不帶任何參數,它會做默認:既然你打電話從兩個不同的文件的功能,你可以添加一個默認的參數一樣

在特殊情況下,您想要限制爲2,只需使用該參數調用該函數即可。

yourFunction(); // This will do the limit of 5 

yourFunction(2); // This will do 2 

這也讓是一個免費爲所有的,所以你可以使用任何你想要

+0

是的 - 通常會起作用 - 但我不想更改核心應用程序(這是一個插件)。例如,我不能說「要使用這個插件,你只需在配置文件中更改查詢。」雖然我寫了他們兩個,但我希望核心應用程序保持穩定(從用戶的角度來看,它已經是動態的) - 而且我希望插件是古怪的。 – Pear

+0

@ user3925824請參閱編輯。 – eeetee

+0

雖然我接受了答案 - 但實際答案是我在OP中描述的方式是不可能的。對於未來的讀者來說,本例中的「5」是分頁編號 - 一個特定的主題只需要頭兩個顯示在首頁上的結果,剩下的列表將遵循用戶的偏好 - 所以在獲得分頁結果的函數之前,我可以用LIMIT 2重寫查詢(因爲它發生在索引中)。我可能應該解釋所有的笑聲 - 再次感謝所有 – Pear

2

任何限制,您可以定義限制在文件中的一個變量:

// Define variable 
$limit_number = 5; 

然後包括文件B中的文件A使用包含函數(我假設你已經這樣做了)。 然後在文件B中包含文件A之後,現在可以在文件B中更改變量的值。

include('path/to/fileA'); 
$limit_number = 2; 
// call the query executing function you speak of from File A. 

爲此,您將不得不將硬編碼的5替換爲查詢中變量的限制。

$row = mysqli_query($db,"SELECT id FROM table ORDER BY id DESC LIMIT ".$limit_number); 
+0

好的。我不認爲這是可能的。5是用戶可以更改爲高數字的默認值。該插件使用相同的查詢,但只需要前兩個結果。我可以在函數獲取它之前更改var - 但它看起來並不是最有效的 - 好像兩個查詢都運行一個獲取結果..但是這是一個一次性插件,所以沒有biggie。我必須接受第一個迴應的人,但我給了我一個投票..我假設直接的答案是這是不可能的,我描述的方式。 – Pear

+0

沒有任何2個查詢正在執行,甚至沒有任何特定時間被聲明或有實例。只有變量被更改並由完全相同的查詢使用。儘管如此,從你描述的情況來看,你需要的正是eeetee在上面編輯之後所描述的。 – coderodour

+0

是的 - 當我回復他時,他的編輯正在顯示給我,但是 - 這將是正確的實現,我可能會在下一個版本中修復它! – Pear