在mysql php中从逗号分隔的id中查找数组明智的id

时间:2016-07-19 06:41:56

标签: php mysql

我有一个表,其中包含多个逗号分隔的ID,其中包含多个字段:

enter image description here

我需要一些我已经使用mysql中的数组传递的proid

proid = array([0]=>51,[1]=>54,[2]=>8)

我想要包含51,54&的行8 proid来自表格字段,以逗号分隔的标准符号

51,52,53,54,2,3,4,5,8,9,11,55,13,14,15,16,17,18,1,... 

此处我尝试FIND_IN_SET但在select查询中无法正常工作,可以参见下文

SELECT * FROM `tbl_request` WHERE FIND_IN_SET('51,54,8', `proid`) > 0

任何人都可以帮助我,

提前致谢

6 个答案:

答案 0 :(得分:0)

FIND_IN_SET()函数将第一个参数作为完整字符串,并将其与第二个参数进行比较。 如果您将51作为第一个参数传递,则SQL将返回结果。但是你尝试'51,8'然后它会将它视为一个字符串而不是两个字符串,它将搜索完整的'51,8'。 所以你需要像Jothi在评论中提到的那样

SELECT FIND_IN_SET('51', `proid`) > 0 or FIND_IN_SET('54', `proid`) > 0 or FIND_IN_SET('8', `proid`) > 0; 

参考:http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-sethttp://www.w3resource.com/mysql/string-functions/mysql-find_in_set-function.php

$sql = 'SELECT * FROM `tbl_request` WHERE ';
$items = array(51,54,8);
foreach($items as $item){
    $where[] = "FIND_IN_SET('$item', `proid`) > 0";
}
if(is_array($where)){
    $sql.= implode(' OR ', $where);
}else{
    $sql.= '1';
}

答案 1 :(得分:0)

FIND_IN_SET()仅查找第一个参数的位置。

您可以尝试

SELECT
 *
FROM tbl_request
WHERE FIND_IN_SET('51', proid)
   OR FIND_IN_SET('54', proid)
   OR FIND_IN_SET('8', proid);

答案 2 :(得分:0)

你可以这样做:

$proid = array(0=>51,1=>54,2=>8);

$cond_array = array() ;

foreach($proid as $val){
    $cond_array[] = "FIND_IN_SET($val, `proid`) > 0";
}

$sql = "SELECT * FROM `tbl_request` WHERE ".implode(' OR ', $cond_array);

echo $sql;

输出:

SELECT SELECT * FROM `tbl_request` WHERE FIND_IN_SET(51, `proid`) > 0 OR FIND_IN_SET(54, `proid`) > 0 OR FIND_IN_SET(8, `proid`) > 0

答案 3 :(得分:0)

试试这个

            <?php

        $proid = array(51,54,8);


        $concat='';

        foreach($proid as $row)
        {
          if(empty($concat))
          {
              $concat.=" FIND_IN_SET('$row', proid) >0";

          }
          else
          {

           $concat.=" or FIND_IN_SET('$row', proid) >0";
          }


        }

        echo "SELECT * FROM tbl_request WHERE ".$concat

        ?>

答案 4 :(得分:0)

选择多个字段的人我使用此代码并且工作正常

data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw......

答案 5 :(得分:0)

$sql = 'SELECT * FROM course where ';
$items = array(49,50,52);
foreach($items as $item){
    $where[] = "FIND_IN_SET(cid,'$item') > 0";
}
if(is_array($where)){
    $sql.= implode(' OR ', $where);

}else{
    $sql.= '1';

}
$statement = $dbo->prepare($sql);

$statement->execute();

$result = $statement->fetchAll();

  foreach($result as $row)
     {
      echo $sid=$row["cid"]."      ";
      echo $name = $row["cname"]."<br>";
     }
}

它将像在上面的声明中修改的魅力一样工作。我没有得到结果。但是更改FIND_IN_SET后,我将获取所有数据。

enter image description here

这句话是对的,我不是在说错了,但是错误在SQL的 FIND_IN_SET函数中。您可以在图片中看到哪些查询将帮助我获取数据库。