【问题标题】:Find array wise ids from comma separated ids in mysql php在mysql php中从逗号分隔的id中查找数组明智的id
【发布时间】:2016-11-21 22:00:04
【问题描述】:

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

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

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

我想要包含 51,54 & 8 proid 的行来自逗号分隔的 proids 中的表字段

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

谁能帮帮我,

提前致谢

【问题讨论】:

  • 你试过了吗:SELECT * FROM tbl_request WHERE FIND_IN_SET('51,54,8', proid)
  • SELECT FIND_IN_SET('51', '51,54,8') 或 FIND_IN_SET('54', '51,54,8') 或 FIND_IN_SET('8', '51,54, 8');
  • @Amit 是的,我试过了,但是不工作 select * from tbl_request where find_in_set('51',proid) 0 for single proid ,它会工作

标签: php mysql


【解决方案1】:
$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 中更改后,我会得到所有数据。

这是正确的声明,我没有说这是错误的,但错误在 SQL 的 FIND_IN_SET 函数中。您可以在图片中看到哪些查询将帮助我获取数据库。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      多字段选择的伙计们,我使用此代码,它工作正常

      $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.")";
      

      【讨论】:

        【解决方案4】:

        你可以这样做:

        $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
        

        【讨论】:

          【解决方案5】:

          试试这个

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

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

            • 亲爱的@PARAG,但我在数组中有多个数据以及如何从字符串中找出,我很困惑
            • 所以你的意思是我必须在 where 子句之后使用来自数组数据的循环 .right???
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-09-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多