【发布时间】:2015-02-05 21:55:32
【问题描述】:
在我的 laravel 项目中,我有一个 db 字段,用户可以在其中存储要考虑进行排序的参数及其订单。即数据表“config”包含这样的列值
status-desc,priority-asc,..etc
在这里,当我编写查询时,我需要使用这些值作为成对的顺序。
ORDER BY status desc, priority asc
我可以像上面那样在查询代码中对此进行硬编码,因为排序列可能会根据用户输入而有所不同。
我已经像这样分别分解了两个标准
$params = explode(',', $sort_param->config_value);
所以我得到了$params[0] = status-desc and $params[1] = priority-asc ...
但是我怎样才能再次分解这些并在查询中获取和使用它们以获取订单??
到目前为止我所做的是:
$countt = count($params);
for($prm=0;$prm<$countt;$prm++){
list($k, $v) = explode('-', $params[$prm]);
}
echo $k.' '.$v;
回显 $k 和 $v 显示 priority asc
【问题讨论】:
-
您的数据库设计错误,将数据序列化到单列中违反了 1NF。如果一个表中的一列需要存储多个值,那么这肯定表明您需要为该列创建一个从属表。此外,委婉地说,基于外部输入构建查询是有风险的。
-
为什么不将数据视为关联数组,然后将其序列化以将其保存在数据库中。然后你可以反序列化并做任何你想做的事情。例如:
$value = array('status'=>'desc', 'priority'=>'asc'); $serialized = serialize ( $value );