在数据库表中存储产品描述/详细信息的最佳方法是什么。 PHP mysql

时间:2014-11-13 14:46:14

标签: php mysql

我们假设我们有一个带有这些描述的产品(如此显示,每行一个):

描述1

描述2

描述3

描述4

说明N

将这些产品描述存储在数据库表中的最佳方法是什么,以便它们可以显示在"描述"动态产品页面的标​​签。

我想避免创建N个不同的表列,每个描述一个。

感谢您的建议

4 个答案:

答案 0 :(得分:1)

创建另一个关系表。

产品表:

id
name
serial
....

描述表:

id
product_id
description
order / could be 1,2,3,n/

然后你可以:

$sql = "SELECT * FROM descriptions"
    . " WHERE product_id  = " . $productId . ""
    . " ORDER BY `order`";

详细了解:http://en.wikipedia.org/wiki/Database_normalization

修改

我已经添加了订单栏,因为我想假设您要以正确的顺序显示说明。如果您不使用此order字段,则无法确定,当您选择1个产品的说明时,您会收到哪个订单。

id | product_id | description | order
1    1            This is the   1
                  first desc 

2    1            This is the   3
                  3rd

3    1            This is the   2
                  2nd

因此您可以自由地按任何顺序添加说明,但保留正确的顺序。 order字段名称可以是任何其他名称,例如:desc_order

答案 1 :(得分:0)

如果您对每个产品有大量描述,我建议您创建一个与产品表有关系的新表。现在,您可以创建一对多(或添加一个复合表的多对多)关系,而不必担心您获得了多少不同的描述。

之后,您可以使用JOIN子句

获取产品的所有描述

答案 2 :(得分:0)

如果你想分开每个描述,那么你可以使用一个数组,然后使用json_encode()数组。

<?php
   $text = [
      [0] => 'desc 1',
      [1] => 'desc 2',
      ...
   ];
   $json_text = json_encode($text);
   // save $json_text to the field.

   // to extract the from table
   $text = json_decode($text);
   for($text as $t) {
     echo $t; //the descs.
   }

您也可以使用serialize()。

这只是一个选项,然后使用相对表,但为了更快地获取数据,您可以使用此方法。

答案 3 :(得分:0)

如果您有多种类型的产品并且有特殊描述,那么您可以在设计中使用订单项概念, 请参阅此example

例如,您可以拥有以下两个表:

Producttbl( productID ,productName,totalnumber,baseprice)

Productitemtbl(itemid, productid ,说明,价格,折扣)

如果您有商店,这是存储产品及其说明的有效方法之一!