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