【发布时间】:2015-12-21 23:16:36
【问题描述】:
杰森数据: avail":["Sun-2","Mon-2","Sun-3"]
$avail = $data['avail'];
//下面我按早上、下午和晚上对值进行分类。
if($avail != ""){
foreach($avail as $k=>$v)
{
$v;
//dividing value before and after the symbol '-'
$array = explode('-', $v);
$day =$array[0]; // Wed
$column = $array[1]; // 2
if($column == 1)
{
$col = "morning";
}
if($column == 2)
{
$col = "afternoon";
}
if($column == 3)
{
$col = "evening";
}
array_push($cols,$col);
array_push($days,$day);
}
var_dump($cols) 的结果;
array (size=3)
0 => string 'afternoon' (length=9)
1 => string 'afternoon' (length=9)
2 => string 'evening' (length=7)
var_dump($days) 的结果;
array (size=3)
0 => string 'Sun' (length=3)
1 => string 'Mon' (length=3)
2 => string 'Sun' (length=3)
现在我像这样查询数据库中的表: //查询的一部分
$add_here .= sprintf(" AND %s",implode(' OR ', array_map(function($colx) use ($days) {return sprintf("posts.%s IN ('%s')", $colx, implode("','",$days));}, is_array($cols) ? $cols : array($cols))));
但直到现在,我才意识到我做错了,因为我对数据进行分类的方式构成了两个数组。一个用于当天的会话,另一个是每个会话的数据集。
$days = ['sun','mon','tue']; <- data for morning,afternoon and evening mixed together
$col = ['afternoon','morning','evening'];
在浏览器中:
AND (posts.afternoon IN ('sun','mon','tue') OR posts.morning IN ('sun','mon','tue') OR posts.night IN ('sun','mon','tue'))
看到它检查了$days 的所有数据与$cols 的每个值。但我想要的是,上午的数据与表中的上午列进行核对,而下午的数据与表中的下午列进行核对。晚上也一样。
如何更改我的代码以使 JSON 数据集的查询如下所示?
杰森数据: avail":["Sun-2","Mon-2","Sun-3"]
AND (posts.afternoon IN ('sun','mon') OR posts.night IN ('sun'))
上午、下午和晚上的值以逗号分隔 数据库中的值。上午、下午和晚上是名为 posts 的表中的列名
【问题讨论】: