2011-09-28 2 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:"";} 

, 나는 최선의 방법이 무엇인지 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()을 사용하십시오.

다음 코드는 첫 번째 가격 값 검색 할 수 있습니다 :

$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) "" 
}