如何使用分隔列和值的数组生成查询
Posted
技术标签:
【中文标题】如何使用分隔列和值的数组生成查询【英文标题】:How to generate a query using an array of delimited columns & values 【发布时间】:2017-10-04 18:58:57 【问题描述】:我有这个数组:
$filter=['color*black','color*blue','color*red','paint*apex','paint*dalton'];
$filter
中的每个值都有两个由*
分隔的子字符串。第一个子字符串表示数据库表列,第二个子字符串表示该列的所需值。
我的products
表如下所示:
id name color paint
1 p1 black compo
2 p2 red dalton
3 p3 pink apex
4 p4 blue apex
5 p5 cream compo
使用$filter
,我需要搜索products
表并返回paint
值为apex
或dalton
和color
值为black
、blue
的所有行,或red
。
所需的输出是一个只返回这些行的 mysql 查询:
id name color paint
2 p2 red dalton
4 p4 blue apex
【问题讨论】:
【参考方案1】:如果您需要像SELECT * FROM products WHERE (color IN ('black', 'blue', 'red')) AND (paint IN ('apex', 'dalton'))
这样构造一个查询,那么下面的代码可能会有用(请检查它here):
$filter = array(
0 => "color*black",
1 => "color*blue",
2 => "color*red",
3 => "paint*apex",
4 => "paint*dalton"
);
$elements = [];
foreach ($filter as $value)
list($before, $after) = explode('*', $value);
$elements[$before][] = $after;
$parts = [];
foreach ($elements as $column => $values)
$parts[] = "(`$column` IN ('" . implode("', '", $values) . "'))";
$query = 'SELECT * FROM `products` WHERE ' . implode(' AND ', $parts);
针对给定的表数据结构运行此查询:
id name color paint
1 p1 black compo
2 p2 red dalton
3 p3 pink apex
4 p4 blue apex
5 p5 cream compo
将匹配以下行:
2 p2 red dalton
4 p4 blue apex
【讨论】:
你能用给定的表结构和条目运行这个吗? @abilasher 我已经检查过your question,但很遗憾无法帮助您。【参考方案2】:这里我们使用explode
、foreach
和array_values
来实现所需的输出。
Try this code snippet here
<?php
$filter = array(
0 => "color*black",
1 => "color*blue",
2 => "color*red",
3 => "paint*apex",
4 => "paint*dalton");
$result=array();
foreach($filter as $value)
list($before,$after)=explode("*",$value);
$result["before"][$before]=$before;
$result["after"][$after]=$after;
$result["before"]= array_values($result["before"]);
$result["after"]= array_values($result["after"]);
print_r($result);
输出:
Array
(
[before] => Array
(
[0] => color
[1] => paint
)
[after] => Array
(
[0] => black
[1] => blue
[2] => red
[3] => apex
[4] => dalton
)
)
【讨论】:
能否请您告诉我如何执行 sql 操作。 @abilasher 你可以试试这个。eval.in/788364 在我给出的最后一个 SQL 查询中,或者我已将其更改为颜色和油漆之间的 AND 条件。以上是关于如何使用分隔列和值的数组生成查询的主要内容,如果未能解决你的问题,请参考以下文章