提问人:Ahmad Khaled 提问时间:7/10/2023 最后编辑:Ahmad Khaled 更新时间:7/17/2023 访问量:92
如何从另一个表向MySQL中的表添加数据 和 FORM 输入
How Do I add data to a table in MySQL from another table And FORM inputs
问:
我目前正在处理 Web 开发人员工作的任务。任务是创建一个简单的产品列表并添加产品页面。
棘手的部分是,在添加产品页面上,有始终可见的输入,例如:
- 产品名称
- 产品 SKU
- 产品价格
- 产品类型(数字、书籍、家具)
以及指定产品类型时的另外一个或多个输入字段。
这是设计应该是什么样子的图片:任务 mochup
在数据库中,我创建了 4 个表,如下所示:
下面是来自 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表中,如下所示:
编号 | 类别 |
---|---|
1 | DVD光盘 |
2 | 书 |
3 | 家具 |
以下是variant_name表:
编号 | 名字 | product_category_id |
---|---|---|
1 | 大小 | 1 |
2 | 重量 | 2 |
3 | 高度 | 3 |
4 | 宽度 | 3 |
5 | 长度 | 3 |
这是type_variants表:
编号 | var_name_id | 值 |
---|---|---|
1 | 1 | 10 |
2 | 2 | 20 |
3 | 3 | ## |
4 | 4 | ## |
5 | 5 | ## |
我的想法是将值插入type_variants表,然后将该值连接到variant_name,以便我可以将值分别添加到表中。$_POST['typeId']
这是我通常运行的 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。
但我的方法是根据名称表中的 id + 来自表单的数据向此表添加数据。
所以我无法使用子查询找到解决方案。
有什么帮助吗!!
答:
1赞
nbk
7/10/2023
#1
你可以这样做,因为你看到猫作为桌子是没有必要的
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;
Table 'fiddle.type_variants' doesn't exist
所以在考虑了你的问题之后,我瘦了你有如下的东西,然后你会像这样重写它
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
var_name_id | 值 |
---|---|
1 | 30 |
2 | 50 |
3 | 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
SELECT * FROM type_variants
var_name_id | 值 |
---|---|
1 | 30 |
2 | 50 |
3 | 15 |
4 | 30 |
5 | 50 |
6 | 15 |
7 | 30 |
8 | 50 |
9 | 15 |
评论
0赞
Ahmad Khaled
7/15/2023
此命令仅将值 30 相加三次。
0赞
nbk
7/15/2023
交叉连接不会这样做,pkease 使用实际数据更改小提琴并在此处发布链接
0赞
nbk
7/15/2023
此外,ypu 应该删除限制子句@AhmadKhaled这是 ptobably 的原因 ehy 只有 3 行
0赞
Ahmad Khaled
7/16/2023
当我删除限制时,它最终会将每个值相加 3 次,因此最后的总记录数为 9。这不是我想要的。
0赞
nbk
7/16/2023
就像我说的,改变我的小提琴,用一个最小的可重复的例子来展示你的问题
评论
SELECT