2011-12-22 3 views
1

Я разрабатываю систему продуктов PHP, которая должна быть очень общей, поскольку каждый продукт может иметь несколько опций («высота», «ширина», «цвет», , «пол» и т. д.), но некоторые продукты могут не иметь этих опций, а некоторые из них могут отсутствовать.Система продуктов PHP/mySQL (очень общая)

Например, комод может иметь «размер» (список подходящих размеров, установленный где-то пользователем сайта), «полированный» (да/нет) и «окрашенный» (да/нет). Однако у нового телевизора вообще нет вариантов.

Может ли кто-нибудь рекомендовать пользователю указать параметры, которые им необходимы для своих продуктов (например, «полированный» не будет иметь никакого отношения к розничной торговле), а затем для хранения цен на различные комбинации опций как они определяют для каждого продукта?

ответ

0
`options` text null, 

//DONT run this directly, it needs escaping...but you get the idea. 
insert into tablename values({['polished':(int)1, 'size':'oh_its_big']}), ({['color':'hotpink']}); 


//run your query 
$query = $db->select("* from tablename"); 

//loop query, json_decode the options string and assign to array 
foreach($query as $q) 
{ 
    $tmp[] = (array)json_decode($q->options); 
    foreach($tmp as $options) 
    { 
     //run some conditional statements 
     if(array_key_exists('size', $options)) 
     { 
      //do something 
     } 
    } 
} 
0

IMO, Это очень общий вопрос, и вам нужно предоставить дополнительную информацию об особенностях.

Одно решение, которое всплывает в моей памяти заключается в следующем

public class myAwesomeClass { 

$typeOfMyClass; //got from a DB when a user creates a new type. 
$keyAndValuePair; //holds the key=>value pair of the type's data 

} 

и получить к нему доступ во внешнем мире.

$obj = new myAwesomeClass(); 
//based on $obj->typeOfMyClass value process 
foreach ($obj->keyValuePair as $key=>$value) { 

//perform your operations 

} 
+0

PS: Это такой базовый класс, что вы описали, что я вряд ли рекомендовать использовать это. Не зная специфики, мне трудно отвечать точно :) – footy