繁体   English   中英

在MySQL PHP中从逗号分隔的ID中查找数组明智的ID

[英]Find array wise ids from comma separated ids in mysql php

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

在此处输入图片说明

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

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

我想要包含以逗号分隔的proid的表格字段中包含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 * FROM `tbl_request` WHERE FIND_IN_SET('51,54,8', `proid`) > 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-set,http : //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';
}

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

您可以按照以下方式进行操作:

$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

尝试这个

            <?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

        ?>

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

$proids='';
        foreach($_POST["product"] as $row_product)
        {
          if(empty($proids))
          {
              $proids.=" FIND_IN_SET('$row_product', `proid`) >0";
          }
          else
          {
            $proids.=" OR FIND_IN_SET('$row_product', `proid`) >0";
          }
        }

        $disidreport='';
        foreach($_POST["distributor"] as $row_distributor)
        {
          if(empty($disidreport))
          {
              $disidreport.=" FIND_IN_SET('$row_distributor', `disidreport`) >0";
          }
          else
          {
            $disidreport.=" OR FIND_IN_SET('$row_distributor', `disidreport`) >0";
          }
        }

        echo $select_req = "SELECT * FROM `tbl_request` WHERE (".$disidreport.") AND (".$proids.")";
$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>";
     }
}

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

在此处输入图片说明

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM