0

我有 2 张桌子。产品(id、名称、描述、类别 id、类别名称)和类别(id、名称、描述)。我创建了一个使用类别选项的表单。提交表单时,将类别 ID 插入到产品中,这很好,但我希望将类别 ID 和类别名称插入到产品中。我怎样才能做到这一点?我的头在旋转。

$query = "INSERT INTO products SET name=:name, description=:description, 
category_name=:category_name, category_id=:category_id, image=:image, created=:created";

<?php
$query = "SELECT id, name FROM categories ORDER BY name";
$stmt = $con->prepare( $query );
$stmt->execute();

echo "<select class='form-control' name='category_id'>";
echo "<option>Select category...</option>";

while ($row_group = $stmt->fetch(PDO::FETCH_ASSOC)){
extract($row_group);

echo "<option value='{$id}'>{$name}</option>";
}

echo "</select>";
?>
4

1 回答 1

0

老实说,就冗余而言,这不是一个好方法。良好的数据库设计(规范化)的重点是消除重复组和对非键属性的部分依赖。

更好的表结构是:

产品(id、名称、描述、类别 id) 类别(id、名称、描述)

根据需要将 category_id 插入到产品中,然后当您需要产品名称/描述和类别名称/描述时,您可以使用 JOIN 查询它

$sql = "SELECT p.*, c.name cname, c.description cdesc FROM products p INNER JOIN categories c ON (c.id = p.category_id) WHERE p.name=:product_name";

$stmt = $con->prepare($sql);
$stmt->execute( [ ':product_name' => 'toy car' ] );

foreach($stmt as $row) {
    echo $row['name']; //product name
    echo $row['cname']; //category name column aliased as cname
    echo $row['cdesc']; //category description aliased
}
于 2020-05-10T01:57:02.527 回答