我创建一个产品数据库,并尝试做正确的方式。这是我迄今为止的数据库设置。消除重复日期的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生成的属性行是唯一的,并且不能添加重复项。那么如何验证跨多个表的重复?
你的代码中有一个SQL注入漏洞。确保使用mysql_real_escape_string()** AND **总是将单个引号中的$ vars放入查询中,就像'WHERE sku.product_idproduct ='$ pid''一样。如果忘记单引号,则注入孔保持打开状态。 – Johan 2011-05-19 07:22:36