簡體   English   中英

PHP數組匹配MYSQL字符串

[英]PHP array match MYSQL string

我有一個顏色數組,想與MYSQL中的顏色行匹配,

只要顏色行與數組中的一種顏色匹配,然后將其取出。

以下$colorArray應匹配ID 2和3,因為這些行包含黃色和藍色

$colorArray = array('yellow','blue');

+------+---------+------------+
| id   | product | color      |
+------+---------+------------+
|    1 | tShirt  | red,green  |
|    2 | jeans   | yellow,red |
|    3 | shorts  | black,blue |
+------+---------+------------+

我只想要MySQL SELECT語法,我知道可以用PHP array_intersect來做一些過濾器,但是由於某些原因,我不想這樣做。

那有可能嗎?

我認為您在合並inLike %S%遇到問題,因此REGEXP可能會更高效,但是您必須對其進行基准測試以確保,例如

$colorsStr = implode('|', $colorArray); // => 'yellow|blue'
$sql = "SELECT * FROM <your_table_name> WHERE REGEXP '" . $colorsStr . "'";

這很容易:

<?php
$color = array('yellow', 'red');
$query = "";
foreach($color as $c)
   $query .= "color like '%".$c."%' or ";
$sql = "SELECT * FROM <your_table_name> WHERE ".$query." 1=0";
?>

試試這個代碼:

$colorsStr = implode(',', $colorArray); // => 'yellow,blue'
$sql = 'SELECT id FROM <your_table_name> WHERE color IN('.$colorsStr.')';

您可以嘗試如下操作:

$colorArray = array('yellow','blue');
$colors = join(',',$colorArray);  
$sql = "SELECT '$colors' AS colors,
       color,
       CONCAT('(', REPLACE(color, ',', '(\\,|$)|'), '(\\,|$))') AS regex,
       '$colors' REGEXP CONCAT('(', REPLACE(color, ',', '(\\,|$)|'), '(\\,|$))') AS intersect
       FROM YourTableName
       GROUP BY id HAVING intersect > 0";
$colorArray = array('yellow','blue');
$colors = implode(",",$colorArray);  
$query = "SELECT color FROM TableName WHERE color = '.$colors.'";

在查詢中使用FIND_IN_SET()。嘗試讓我知道。 希望我能解決您的問題,您需要的查詢

SELECT * FROM t3 WHERE FIND_IN_SET('yellow', colour) or FIND_IN_SET('blue', colour) 

碼:

<?php
$colorArray = array('yellow','blue','red');
$where1 ="FIND_IN_SET('$colorArray[0]', colour) ";
$where="";
for($i=1;$i<sizeof($colorArray);$i++){
$color=$colorArray[$i];
$where .= "  or FIND_IN_SET('$color', colour) ";
}
$sql="SELECT * FROM t3 WHERE $where1 $where";
//echo $sql;//SELECT * FROM t3 WHERE FIND_IN_SET('yellow', colour) or FIND_IN_SET('blue', colour) or FIND_IN_SET('red', colour) 
// try running this query 
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM