【问题标题】:Retrieving a Specific Value From A Serialized Array MySQL从序列化数组 MySQL 中检索特定值
【发布时间】:2023-03-31 01:49:01
【问题描述】:

数据库结构如下:

id|metaKey|metaValue
--+-------+-----------------------------------
55|product|a:8:{s:3:"sku";s:0:"";s:8:"products";a:3:{i:1;a:3:{s:6:"option";s:1:"1";s:5:"price";s:5:"14.95";s:9:"saleprice";s:0:"";}i:2;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:3;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}}s:11:"description";s:124:"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";s:8:"shiprate";s:1:"A";s:8:"featured";s:2:"no";s:4:"sale";s:3:"yes";s:10:"cart_radio";s:1:"0";s:6:"optset";s:0:"";}

这是来自 wordpress 网站,我需要检索第一个“价格”值,即 14.95 从存储在 mysql 中的序列化数组中检索特定值的最佳方法是什么?

【问题讨论】:

  • 请正确格式化您的问题,以便我们都能阅读。
  • 在数据库中插入序列化值是terrible design practice。如果您可以控制它,请以正确的方式进行。
  • 是的,我通常不会这样做,它是一个插件创建的。

标签: php mysql wordpress denormalized


【解决方案1】:

创建查询,从 SQL 读取数据,unserialize() metaValue 并像数组一样访问它。如果需要在mysql中提取,也可以尝试使用正则表达式,但这不是很好的方法。

【讨论】:

    【解决方案2】:

    使用unserialize() 检索metaValue 数据。

    以下代码可以检索第一个价格值:

    $result = mysql_query("SELECT * FROM tbl WHERE id=55");
    $row = mysqLfetch_assoc($result);
    
    $serial = $row['metaValue'];
    $data = unserialize($serial);
    echo $data['products'][1]['price'];
    

    这一行的数据结构如下:

    array(8) {
      ["sku"]=>
      string(0) ""
      ["products"]=>
      array(3) {
        [1]=>
        array(3) {
          ["option"]=>
          string(1) "1"
          ["price"]=>
          string(5) "14.95"
          ["saleprice"]=>
          string(0) ""
        }
        [2]=>
        array(3) {
          ["option"]=>
          string(0) ""
          ["price"]=>
          string(0) ""
          ["saleprice"]=>
          string(0) ""
        }
        [3]=>
        array(3) {
          ["option"]=>
          string(0) ""
          ["price"]=>
          string(0) ""
          ["saleprice"]=>
          string(0) ""
        }
      }
      ["description"]=>
      string(124) "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
      ["shiprate"]=>
      string(1) "A"
      ["featured"]=>
      string(2) "no"
      ["sale"]=>
      string(3) "yes"
      ["cart_radio"]=>
      string(1) "0"
      ["optset"]=>
      string(0) ""
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      • 2021-06-30
      • 2016-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多