php
  • mysql
  • 2015-11-01 33 views -1 likes 
    -1

    我試圖節省服務器資源,減少查詢MySql:我可以在嵌套查詢中使用查詢結果作爲變量嗎?

    我需要的是使用一個變量在另一個查詢拿着查詢結果作爲這樣

    $names = ("SELECT * FROM table WHERE username like 'M%'"); 
    

    嵌套查詢這將返回在table

    開始M所有的名字後,我想用$names因爲這樣

    $myname = ("SELECT * FROM $names WHERE username='Mohammad'"); 
    
    嵌套查詢

    我看到了一個答案,建議從內存中的第一個查詢結果創建一個臨時表,但這不是我所需要的,因爲我會長時間保留$names,並且我無法將表全部保留在內存中時間,這將繪製服務器資源。

    我想它像上面並與它相似的許多方面的語法,但它沒有工作

    我不想做它在1次這樣的查詢,因爲這將執行嵌套查詢每次我需要使用$names

    $myname = ("SELECT * FROM ("SELECT * FROM table WHERE username like 'M%'") WHERE username='Mohammad'"); 
    

    ,因爲我需要首先結果作爲一個單獨的變量在我的腳本的其他地方使用它。

    編輯

    我首先需要的查詢,因爲我會做基於它的許多查詢,如

    $name = ("SELECT * FROM $names WHERE username='Many'"); 
    $name = ("SELECT * FROM $names WHERE username='Mando'"); 
    

    +0

    你爲什麼不只需從表中選擇*,其中username ='Mohammad''? – FuzzyTree

    +0

    做'SELECT * FROM $ names',如果有人從你以前的搜索中搜索一個不存在的表,例如「Manhattan」,你的查詢將會失敗。您將需要使用條件語句。 –

    +0

    我編輯了我的問題。謝謝大家 – Mohammad

    回答

    0

    您需要刪除雙引號和使你的第一個表作爲新表讓我們說'tbl1':

    $myname = ("SELECT * FROM 
             (SELECT * FROM table WHERE username like 'M%') as tbl1 
          WHERE tbl1.username='Mohammad'"); 
    

    我想你只需要調整的查詢變爲:

    SELECT * FROM table WHERE username = 'Mohammad'; 
    

    在這種情況下,沒有必要窩表,因爲你用同一個表。

    +0

    我編輯了我的問題。謝謝 – Mohammad

    0

    您可以檢索所有相似名稱的列表:

    $names = $database->query("SELECT * FROM table WHERE username like 'M%'"); 
    

    然後依次通過名稱檢索你和處理每一次一個:

    $count = $names->rowCount(); 
    for($i = 0; $i < $count; $i++) { 
        if($names[$i]['username'] == "Mohammed") { 
         // do something 
        } 
    } 
    
    +0

    我編輯了我的問題,謝謝 – Mohammad

    相關問題