【问题标题】:Codeigniter MySQL Query with Variables带变量的 Codeigniter MySQL 查询
【发布时间】:2016-04-22 09:34:20
【问题描述】:

我正在尝试在 Codeigniter 中运行以下示例查询

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'、last_name),以便我可以执行以下操作

型号

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;
    }

现在我尝试将其分解以使用 Codeigniter Active Record 类,但我不知道如何将 where_not_in() 包含在 where() 中,尤其是因为我需要针对 NOT IN 查询第二个表 - 与 Active Records CI 文档中显示的 where_not_in() 示例不同,它针对同一个表。

任何建议或帮助将不胜感激。

非常感谢。

【问题讨论】:

标签: php mysql codeigniter


【解决方案1】:

在 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'

让我知道这是否适合你。

【讨论】:

  • 完美。感谢您的见解。非常感谢。
【解决方案2】:

使用以下代码。通常,单引号内给出的任何内容都被视为字符串,因此它无法识别变量。

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;
}

【讨论】:

  • 完美。感谢您的见解。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 2016-09-16
  • 2011-10-11
  • 1970-01-01
相关资源
最近更新 更多