如何选择具有多个选择值的数据作为 where 子句? - Ajax Codeigniter

Posted

技术标签:

【中文标题】如何选择具有多个选择值的数据作为 where 子句? - Ajax Codeigniter【英文标题】:how to select data with multiple select value as where clause ? - Ajax Codeigniter 【发布时间】:2021-07-30 12:01:09 【问题描述】:

我试图从表中获取数据。我在 codeigniter 上使用 select2 多项选择。如何在我的模型where category = selected values on the option上选择数据?

这是我的选择:

<select name="categories[]" id="selectCategory" class="js-example-basic-multiple selectCategory" style="width: 300px;" multiple="multiple">
    <option value="">All Categories</option>
    <?php foreach ($category as $cat) 
        //option value = id of category
        echo '<option value="' . $cat['id'] . '">' . $cat['category'] . '</option>';
     ?>
</select>

这是我拥有的数据示例:

<table>
    <thead>
        <tr>
            <th>Id</th>
            <th>Category</th>
            <th>Name</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>2</td>
            <td>Food</td>
            <td>Pizza</td>
        </tr>
        <tr>
            <td>3</td>
            <td>Food</td>
            <td>Burger</td>
        </tr>
        <tr>
            <td>4</td>
            <td>Drink</td>
            <td>Mineral Water</td>
        </tr>
        <tr>
            <td>5</td>
            <td>Drink</td>
            <td>Tea</td>
        </tr>
        <tr>
            <td>6</td>
            <td>Snack</td>
            <td>Apple Pie</td>
        </tr>
    </tbody>
</table>

【问题讨论】:

【参考方案1】:

我想你是在问如何在使用多重选择提交表单时从数据库中选择多个项目。

如果这是一个正确的假设,像这样:

<form method="post" action='/admin/formproc'>
    <select multiple name='categories[]> 
        <options....>
    </select>

这将提交给您的 codeigniter 应用程序。

// Admin.php controller

function formproc() 

// CodeIgniter 4

$db = db_connect();
$categories = $this->request->getPost('categories'); // is an array
$sql = "SELECT * FROM categories WHERE id IN ? ";
$result = $db->query($sql, [$categories]);

// CodeIgniter 3

$categories = $this->input->post('categories'); // is an array
$sql = "SELECT * FROM categories WHERE id IN ? ";
$result = $this->db->query($sql, [$categories]);



// Here's how I'd write the SQL without codeignigter or query binding
$cats  = $_POST['categories']; //comes in as an array;
$cats =implode(",",$cats);
$sql = "SELECT * FROM categories WHERE id IN ($cats) ";

【讨论】:

嗨.. 感谢您回答我的问题。我想为此使用ajax。但是我很困惑获取类别 [] 数据并将其放在我的模型中的 WHERE 子句中......我是否应该像 $categories = $this-&gt;input-&gt;post('categories'); 这样获取帖子数据并将其放入我的 WHERE 子句中? @yct - 在我的示例中,我将查询绑定与 codeigniter 结合使用。这样它就可以防止 sql 攻击。我将更新我的答案以显示实际 SQL 语句的样子。 好的,如果我的模型中有所有查询怎么办?所以在我的控制器中应该是$categories = $this-&gt;input-&gt;post('categories');$where = ('id' =&gt; [$categories])$this-&gt;my_model-&gt;getData($where)? 并且在 my_model 中的 WHERE 查询应该是这样的? $this-&gt;db-&gt;where($where); 其实可以用$this-&gt;db-&gt;where_in('categories', $categories);

以上是关于如何选择具有多个选择值的数据作为 where 子句? - Ajax Codeigniter的主要内容,如果未能解决你的问题,请参考以下文章

具有多个 where 子句的选择查询在一个结果表中返回多个结果行?

使用JPA在Sql中具有不同值的多个语句where子句

MySQL 选择 JSON 字段属性具有值的位置

BigQuery:在WHERE子句中使用基于当前行中的值的过滤器进行选择

如何合并具有不同 WHERE 子句的两个 SELECT 查询

具有多个带有 AND 类型逻辑连接的 where IN 子句的配置单元查询