【问题标题】:how to explode key value pairs and use them in query如何分解键值对并在查询中使用它们
【发布时间】: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'=&gt;'desc', 'priority'=&gt;'asc'); $serialized = serialize ( $value );

标签: php mysql laravel explode


【解决方案1】:

试试

$tab = 'status-desc,priority-asc,value,string,demo';
$params = explode(',',$tab);
foreach($params as $v){
    $tab2[] = explode('-',$v);


}
$newTab = array_merge($params,$tab2);
print_r($newTab);

【讨论】:

  • 嗨..谢谢你的回答。它解决了我的问题..让我也尝试在查询中使用它们..
【解决方案2】:

试试这个简单的代码

$tab = 'status-desc,priority-asc,value,string,demo';
list($statut,$priority,$value,$demo) = explode(',',$tab);
echo $statut ;

【讨论】:

    猜你喜欢
    • 2018-11-01
    • 2015-02-22
    • 2015-03-29
    • 2019-05-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2020-10-10
    相关资源
    最近更新 更多