[英]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.