2011-09-28 92 views
3

数据库结构如下:检索特定数值从序列化阵列的MySQL

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中的序列化数组中检索特定值?

+0

请正确格式化您的问题,以便我们都可以读取它。 –

+0

在数据库中插入序列化值是[糟糕的设计实践](http://stackoverflow.com/questions/7364803/storing-arrays-in-the-database/7364834#7364834)。如果您有任何控制权,请按照正确的方式进行操作。 – NullUserException

+0

是的,我通常不会这样做,它是一个创建它的插件。 – jamckp

回答

7

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

+0

完美的作品,谢谢你 – jamckp

1

使用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) "" 
}