2011-05-19 49 views
2

我创建一个产品数据库,并尝试做正确的方式。这是我迄今为止的数据库设置。消除重复日期的MySQL

我的产品表只是一个产品ID和营销描述。 sku表将skuid与productid关联起来。一个产品有许多skus。 Skus对于每种产品都是独一无二的。三个属性表中的属性值(即大小,重量,颜色等)的SKU编号相关联。

下面是结果。

http://174.121.67.116/~aware/awarebk/product_sku_view.php?code=789

产品789具有的SKU 17,24,25,29,30与它有关。第25,29和30行是我的问题。你看到允许重复。该表在数据库中不存在。它是使用下面的代码创建的。我想属性的组合是每个SKU编号是唯一的。我是否通过前端验证来做到这一点?有没有办法在后端做到这一点?这是MySQL的代码,我用它来生成SKU行。

$sidresult = mysql_query("SELECT sku.product_idproduct, 
           sku.idsku, 
           amaterial.material, 
           amcolor.color, 
           atype.type 
          FROM sku sku 
       LEFT OUTER JOIN amaterial ON sku.idsku = amaterial.sku_idsku 
       LEFT OUTER JOIN amcolor ON sku.idsku = amcolor.sku_idsku 
       LEFT OUTER JOIN atype ON sku.idsku = atype.sku_idsku 
          WHERE sku.product_idproduct =$pid"); 

    if (mysql_num_rows($sidresult) > 0) { 
     echo ' 
    <table border="1" cellspacing="0" cellpadding="5px"> 
    <tr> 
    <th>SKU ID</th> 
    <th>Material</th> 
    <th>Material Color</th> 
    <th>Type</th> 

    </tr>'; 
     while ($sidrow = mysql_fetch_array($sidresult)) { 
      echo '<tr>'; 
      echo '<td>' . $sidrow['idsku'] . '</td>'; 
      echo '<td>' . $sidrow['material'] . '</td>'; 
      echo '<td>' . $sidrow['color'] . '</td>'; 
      echo '<td>' . $sidrow['type'] . '</td>'; 
      echo "</tr>"; 
     } 
     // close table> 
     echo "</table>"; 

同样,我的目标是确保使用skuid生成的属性行是唯一的,并且不能添加重复项。那么如何验证跨多个表的重复?

+0

你的代码中有一个SQL注入漏洞。确保使用mysql_real_escape_string()** AND **总是将单个引号中的$ vars放入查询中,就像'WHERE sku.product_idproduct ='$ pid''一样。如果忘记单引号,则注入孔保持打开状态。 – Johan 2011-05-19 07:22:36

回答

1

您的后端验证代码应检查用户输入的与产品ID对应的新SKU值 - 它看起来像您正在使用PHP,因此此例程应该位于处理SKU输入表单的位置(add_product_sku_view.php )。

获取用户输入,运行SQL查询以查看它是否返回任何现有SKU,并在组合已存在时通知用户。只有当他们输入了唯一的SKU详细信息后,才允许将记录插入到您的SKU表中。