mysql查询动态更新
mysql query dynamic update
RESOLVED
我有一个 mysql table (table1),其中有许多列只有一个 ID。
table 姓名: table1
列: 从“pt1 到 pt1000”
id = 1
- 我有一个更新列中数据的查询,一次更新 10 个数据
- 我需要一个独特的动态查询,在每次提交时按顺序插入 10 个值。
例子:
发送查询更新命令(来自php表单)
我在从“pt1”到“pt10”的列中插入10个值
使用其他数据发送查询更新命令(来自相同的 php 表单)
我在从“pt11”到“pt21”等列中插入10个值
问题:如何设置查询,使其知道在正确的列中插入值而不是总是在相同的列中?
感谢大家的帮助
----------------- 编辑 -------------- --------------
我解决了从 php 表单向 php 查询页面传递手动(输入和 select 值)并将此值插入变量以构建动态查询的问题。
例如:
在 PHP 表格中:
有两个select
1 - Select 数据库(值 =“name_db_i_want_to_update”)
2 - Select 列(值 = "1,2,3,4,5,6,7,etc")
在 PHP 查询页中:
- Select 数据库值为“$ db”
- Select 列为“$ set”
- 带有查询集的 IF 语句。 IF column value = 1 ELSE IF etc, $ setquery = pt1 = "value1","value2" 等
- 构建动态查询(UPDATE $db SET $setquery WHERE id=1)
这不是最好的解决方案,作为编程逻辑当然也是错误的,但它确实有效。
感谢大家的帮助
你应该把你的设计改成我的table2,收集数据需要更多的sql编程,但获取数据应该是一次性的事情以您需要的形式。
如果你坚持保留你的设计,你可以使用像blow这样的存储过程来填充你的table,但是你必须知道所属的顺序,这也可以自动化,用另一个table 你在哪里存储了已经填充的数据位置
, 但动态 sql 的基本原理是一样的。
CREATE TABLE mytable2(id int, pos int, value int)
INSERT INTO mytable2 VALUES (1,1,1),(1,2,2),(1,3,3),(1,4,4),(1,5,5),(1,6,6)
CREATE TABLE mytable(id int, pt1 int, pt2 int, pt3 int, pt4 int, pt5 int, pt6 int)
CREATE PROCEDURE `new_routine` (_id int, _sequence int, _pt1 int, _pt2 int,_pt3 int)
BEGIN
IF _sequence = 0 then
SET @sql := CONCAT('INSERT INTO mytable (id,pt1,pt2,pt3) VALUES (',_id,',',_pt1,',',_pt2,',',_pt3,')');
ELSE
SET @sql := CONCAT('UPDATE mytable SET pt',1 +((_sequence -1) * 3) ,'= ',_pt1
,', pt',2 +((_sequence -1) * 3) ,'= ',_pt2
,', pt',3 +((_sequence -1) * 3) ,'= ',_pt3,' WHERE id = ',_id);
END IF;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
CALL new_routine(1,0,1,1,1);
CALL new_routine(1,1,2,2,2)
CALL new_routine(1,2,3,3,3)
SELECT * FROM mytable
id | pt1 | pt2 | pt3 | pt4 | pt5 | pt6
-: | --: | --: | --: | --: | --: | --:
1 | 2 | 2 | 2 | 3 | 3 | 3
SELECT * FROM mytable2
id | pos | value
-: | --: | ----:
1 | 1 | 1
1 | 2 | 2
1 | 3 | 3
1 | 4 | 4
1 | 5 | 5
1 | 6 | 6
db<>fiddle here
RESOLVED
我有一个 mysql table (table1),其中有许多列只有一个 ID。
table 姓名: table1
列: 从“pt1 到 pt1000”
id = 1
- 我有一个更新列中数据的查询,一次更新 10 个数据
- 我需要一个独特的动态查询,在每次提交时按顺序插入 10 个值。
例子:
发送查询更新命令(来自php表单)
我在从“pt1”到“pt10”的列中插入10个值
使用其他数据发送查询更新命令(来自相同的 php 表单)
我在从“pt11”到“pt21”等列中插入10个值
问题:如何设置查询,使其知道在正确的列中插入值而不是总是在相同的列中?
感谢大家的帮助
----------------- 编辑 -------------- --------------
我解决了从 php 表单向 php 查询页面传递手动(输入和 select 值)并将此值插入变量以构建动态查询的问题。
例如:
在 PHP 表格中: 有两个select
1 - Select 数据库(值 =“name_db_i_want_to_update”)
2 - Select 列(值 = "1,2,3,4,5,6,7,etc")
在 PHP 查询页中:
- Select 数据库值为“$ db”
- Select 列为“$ set”
- 带有查询集的 IF 语句。 IF column value = 1 ELSE IF etc, $ setquery = pt1 = "value1","value2" 等
- 构建动态查询(UPDATE $db SET $setquery WHERE id=1)
这不是最好的解决方案,作为编程逻辑当然也是错误的,但它确实有效。
感谢大家的帮助
你应该把你的设计改成我的table2,收集数据需要更多的sql编程,但获取数据应该是一次性的事情以您需要的形式。
如果你坚持保留你的设计,你可以使用像blow这样的存储过程来填充你的table,但是你必须知道所属的顺序,这也可以自动化,用另一个table 你在哪里存储了已经填充的数据位置 , 但动态 sql 的基本原理是一样的。
CREATE TABLE mytable2(id int, pos int, value int)
INSERT INTO mytable2 VALUES (1,1,1),(1,2,2),(1,3,3),(1,4,4),(1,5,5),(1,6,6)
CREATE TABLE mytable(id int, pt1 int, pt2 int, pt3 int, pt4 int, pt5 int, pt6 int)
CREATE PROCEDURE `new_routine` (_id int, _sequence int, _pt1 int, _pt2 int,_pt3 int) BEGIN IF _sequence = 0 then SET @sql := CONCAT('INSERT INTO mytable (id,pt1,pt2,pt3) VALUES (',_id,',',_pt1,',',_pt2,',',_pt3,')'); ELSE SET @sql := CONCAT('UPDATE mytable SET pt',1 +((_sequence -1) * 3) ,'= ',_pt1 ,', pt',2 +((_sequence -1) * 3) ,'= ',_pt2 ,', pt',3 +((_sequence -1) * 3) ,'= ',_pt3,' WHERE id = ',_id); END IF; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END
CALL new_routine(1,0,1,1,1);
CALL new_routine(1,1,2,2,2)
CALL new_routine(1,2,3,3,3)
SELECT * FROM mytable
id | pt1 | pt2 | pt3 | pt4 | pt5 | pt6 -: | --: | --: | --: | --: | --: | --: 1 | 2 | 2 | 2 | 3 | 3 | 3
SELECT * FROM mytable2
id | pos | value -: | --: | ----: 1 | 1 | 1 1 | 2 | 2 1 | 3 | 3 1 | 4 | 4 1 | 5 | 5 1 | 6 | 6
db<>fiddle here