2016-04-22 67 views
2

我試圖運行笨笨MySQL查詢使用變量

SELECT users.id, users.first_name, users.last_name, users.game_id 
FROM users 
WHERE users.id NOT IN 
(SELECT banned.users_id FROM banned) AND game_id = '1' 
ORDER BY last_name 

現在能正常工作在MySQL中下面的示例查詢,但我會要求下面是變量(game_id,「1」,姓氏)​​,這樣我可以做以下

模型

function get_where_custom_ordered_checked($col, $value, $order_by) { 

     $query = $this->db->query(' 
            SELECT users.id, users.first_name, users.last_name, users.game_id 
            FROM users 
            WHERE users.id NOT IN 
            (SELECT banned.users_id FROM banned) AND $col = $value 
            ORDER BY $order_by 
            '); 
     return $query; 
    } 

顯然,這並不工作,查詢不承認變量。我將如何實現這一目標?我也嘗試使用SET,如我的研究中所示,如下所示(但仍無濟於事)。

模型

function get_where_custom_ordered_checked($col, $value, $order_by) { 
     $query1 = 'SET @col = '$col', @value = '$value', @order_by = '$order_by''; 
     $this->db->query($query1); 
     $query2 = $this->db->query(' 
            SELECT users.id, users.first_name, users.last_name, users.game_id 
            FROM users 
            WHERE users.id NOT IN 
            (SELECT players_phases.players_id FROM players_phases) AND @col = @value 
           ORDER BY @order_by 
            '); 
     $query = $this->db->query($query2); 
     return $query; 
    } 

現在我試着將它分解,而不是使用笨的Active Record類,但我不知道如何包括其中內where_not_in()()尤其是因爲我需要對第二個表運行NOT IN查詢 - 與Active Records CI文檔中顯示的與where_not_in()示例相反的where_not_in()示例不同,它與同一個表不同。

任何建議或幫助,將不勝感激。

非常感謝。

+0

[笨的Active Record哪裏都不在字符串]的可能的複製(http://stackoverflow.com/questions/16673933/codeigniter-active-record-where-not-in-string) – splash58

+0

可以解釋更多和你實現了什麼? – Divyesh

+0

您也可以使用字符串插值。如果您需要在字符串中進行變量讀取,請使用雙引號。 – Tpojka

回答

1

使用下面的代碼。通常,在單引號內給出的任何內容都被認爲是一個字符串,所以它不能識別這些變量。

function get_where_custom_ordered_checked($col, $value, $order_by) { 

    $query = $this->db->query(' 
           SELECT users.id, users.first_name, users.last_name, users.game_id 
           FROM users 
           WHERE users.id NOT IN 
           (SELECT banned.users_id FROM banned) AND '.$col.' = '.$value.' 
           ORDER BY '.$order_by.' 
           '); 
    return $query; 
} 
+0

完美。感謝您的見解。非常感激。 –

4

在PHP中不能使用單引號中的變量,他們將不被認可。

使用下面的代碼來代替:

'SELECT users.id, users.first_name, users.last_name, users.game_id 
FROM users 
WHERE users.id NOT IN 
(SELECT players_phases.players_id FROM players_phases) AND ' . $col . ' = ' . $value . 'ORDER BY @order_by' 

讓我知道這是爲你工作。

+0

完美。感謝您的見解。非常感激。 –