[英]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
来做一些过滤器,但是由于某些原因,我不想这样做。
那有可能吗?
我认为您在合并in
和Like %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.