2011-09-28 90 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) "" 
}