MySQL选择查询逗号分隔数字过滤结果

时间:2017-07-01 11:47:25

标签: php mysql

我的表格如下:

Table screenshot

我在这里通过查询获得结果:

$subject_ids = implode(',', $_POST['subject_ids'])

SELECT * FROM table WHERE focusarea LIKE '%$subject_ids%' ;

结果很完美,但是当我选择多个主题ID时没有任何内容可以显示,例如,如果只选择一个主题ID, 但是何时选择1,2和4,但这个LIKE查询没有任何内容...

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

使用implode之类的,

<强> PHP

$subject_id_aray = explode(",",$_POST['subject_ids']);
$in_array_string = array();
foreach($subject_id_aray as $values){
    $in_array_string[] = "'".$values."'";
}

<强> MySQL的

$sql = "SELECT * FROM table WHERE focusarea in (".implode(",",$in_array_string).") ;";

答案 1 :(得分:0)

也许你有POST的错误。

尝试echo$subject_ids注入SQL。

您关注的是简单的数字字符串,由,连接,但您POST发送的内容可能不正确。

其他问题,这看起来不像你的完整代码。 提供您的文件,如果这不能解决问题。

答案 2 :(得分:0)

LIKE子句不适用于您的情况,因为在查询中使用LIKE '%1,2,3%'将无法获得任何内容,因为您使用ID时应使用IN而不是LIKE。如果是字符串,LIKE将分别用于每个id。

当您将$_POST['subject_ids']作为数组时,查询将类似于

$subject_str = implode(',', $_POST['subject_ids']);
$sql = "SELECT * FROM table WHERE focusarea IN($subject_str)";

如果您的列focusarea不是整数,那么

$subject_str = "'".implode("','", $_POST['subject_ids'])."'";
$sql = "SELECT * FROM table WHERE focusarea IN($subject_str)";