我如何从另一个表和FORM输入添加数据到MySQL中的表

cvxl0en2  于 2023-08-02  发布在  Mysql
关注(0)|答案(1)|浏览(80)

我目前正在为一个Web开发人员的工作任务。任务是创建一个简单的产品列表并添加产品页面。
棘手的部分是,在添加产品页面上,总是有一些可见的输入,例如:

  • 产品名称
  • 产品SKU
  • 产品价格
  • 产品类型(数码、书籍、家具)

和另一个一个或多个输入字段时,我指定的产品类型。
以下是设计应该是什么样子的图像:task mochup
在数据库中,我创建了如下4个表:
database design scheme

以下是来自add-product表单的数据示例:

$_POST['name'];
$_POST['sku'];
$_POST['price'];
$_POST['typeId'];
// incase the typeId == 1
$_POST['size'];
// incase the typeId == 2
$_POST['weight'];
// incase the typeId == 3
$_POST['height'];
$_POST['width'];
$_POST['length'];

字符串
对于名称、SKU和价格;它们将被添加到产品表中。
typeId已经存储在product_category表中,如下所示:
| 分类| Category |
| --| ------------ |
| DVD| dvd |
| 图书| book |
| 家具| furniture |
下面是variant_name的表:
| 名称,名称|产品类别ID| product_category_id |
| --|--| ------------ |
| 尺寸,尺寸|一个| 1 |
| 砝码|二个| 2 |
| 高度,高度|三个| 3 |
| 宽度|三个| 3 |
| 长度|三个| 3 |
下面是type_variants表:
| var_name_id|价值观| values |
| --|--| ------------ |
| 一个|十个| 10 |
| 二个|二十个| 20 |
| 三个|##| ## |
| 四个|##| ## |
| 五个|##| ## |
我的想法是将值插入到type_variants表中,得到$_POST['typeId'],然后将该值连接到variant_name,这样我就可以将值分别添加到表中。
下面是我经常使用的sql命令:

INSERT INTO `type_variants`(`var_name_id`, `values`)
-- select the id form variant names table
SELECT name.id
FROM variant_name AS name JOIN product_category AS cat ON name.product_category_id = cat.id
WHERE cat.id = 3
-- add both the id and the incoming value
VALUES (`name.id`,'30'), (`name.id`,'50'), (name.id,'15')
LIMIT 0,3;


经过几次搜索后,我意识到在向表中插入数据时不能使用SELECT和VALUES。
但是我的方法是根据names表中的id+表单中的数据向这个表中添加数据。
所以我无法使用子查询找到解决方案。
任何帮助!

axr492tv

axr492tv1#

你可以这样做,因为你看到猫作为表是没有必要的

INSERT INTO `type_variants`(`var_name_id`, `values`)
-- select the id form variant names table
SELECT name.id, inval.val
FROM variant_name AS name CROSS JOIN (SELECT 30 as val UNION ALL SELECT 50 UNION SELECT 15) inval WHERE name.product_category_id = 3
LIMIT 0,3;

个字符
fiddle
所以在考虑了你的问题之后,我认为你有类似下面的东西,然后你会像这样重写它

CREATE tABLe type_variants(`var_name_id` bigint, `values` int)
CREATE TABLE variant_name(id BIGINT AUTO_INCREMENT PRIMARY KEY, product_category_id BIGint)
INSERT INTO variant_name (product_category_id) VALUEs (3),(3),(3),(4),(4),(4),(5),(5),(5)
Records: 9  Duplicates: 0  Warnings: 0
INSERT INTO `type_variants`(`var_name_id`, `values`)
-- select the id form variant names table
SELECT name.id, inval.val
FROM (SELECT id, ROW_NUMBER() OVER( PARTITION BY product_category_id ORDER BY id) rn 
  FROM variant_name   WHERE product_category_id = 3)
  AS name INNER JOIN  (SELECT 30 as val, 1 as rn UNION ALL SELECT 50,2 UNION SELECT 15,3) inval 
ON name.rn = inval.rn
Records: 3  Duplicates: 0  Warnings: 0
SELECT * FROM type_variants

| 价值观| values |
| --| ------------ |
| 三十| 30 |
| 50人| 50 |
| 十五个| 15 |

INSERT INTO `type_variants`(`var_name_id`, `values`)
-- select the id form variant names table
SELECT name.id, inval.val
FROM (SELECT id, ROW_NUMBER() OVER( PARTITION BY product_category_id ORDER BY id) rn 
  FROM variant_name   WHERE product_category_id IN (4,5))  AS name INNER JOIN  (SELECT 30 as val, 1 as rn UNION ALL SELECT 50,2 UNION SELECT 15,3) inval 
ON name.rn = inval.rn
Records: 6  Duplicates: 0  Warnings: 0

| 价值观| values |
| --| ------------ |
| 三十| 30 |
| 50人| 50 |
| 十五个| 15 |
| 三十| 30 |
| 50人| 50 |
| 十五个| 15 |
| 三十| 30 |
| 50人| 50 |
| 十五个| 15 |
fiddle

相关问题