我有一个表,其中包含多个逗号分隔的ID,其中包含多个字段:
我需要一些我已经使用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
任何人都可以帮助我,
提前致谢
答案 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-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';
}
答案 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后,我将获取所有数据。
这句话是对的,我不是在说错了,但是错误在SQL的 FIND_IN_SET函数中。您可以在图片中看到哪些查询将帮助我获取数据库。