首页 > 解决方案 > mysql查询动态更新

问题描述

解决

我有一个 mysql 表(table1),其中包含许多具有单个 ID 的列。

表名: table1

列:从“pt1 到 pt1000”

编号= 1

示例

  1. 发送查询更新命令(来自 php 表单)

  2. 我在从“pt1”到“pt10”的列中插入10个值

  3. 使用其他数据发送查询更新命令(来自相同的 php 表单)

  4. 我在“pt11”到“pt21”等列中插入10个值

问题:如何设置查询,使其知道在正确的列中插入值,而不是总是在相同的列中?

谢谢大家帮助我

------------------编辑------------------

我将手动(输入和选择值)从 php 表单传递到 php 查询页面并将这个值插入到变量中以构造动态查询。

例如:

以 PHP 形式:有两个选择

1 - 选择数据库(值 = “name_db_i_want_to_update”)

2 - 选择列(值 = "1,2,3,4,5,6,7,etc")

在 PHP 查询页面中:

  1. 选择数据库值作为“$ db”
  2. 选择列作为“$ set”
  3. 带有查询集的 IF 语句。IF 列值 = 1 ELSE IF 等,$ setquery = pt1 = "value1","value2" 等。
  4. 构造动态查询( UPDATE $db SET $setquery WHERE id=1 )

这不是最好的解决方案,当然作为编程逻辑也是错误的,但它确实有效。

感谢大家的帮助

标签: phpmysqlformsphpmyadmin

解决方案


您应该将您的设计更改为类似 mytable2 的东西,以收集数据将需要更多的 sql 编程,但以您需要的形式获取数据应该是一次性的事情。

如果你坚持保留你的设计,你可以使用像 blow 这样的存储过程来填充你的表格,但是你必须知道所属的序列,这也可以自动化,另一个表格在你已经填充的数据位置存储,但动态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
编号 | pt1 | pt2 | pt3 | pt4 | pt5 | pt6
-: | --: | --: | --: | --: | --: | --:
 1 | 2 | 2 | 2 | 3 | 3 | 3
SELECT * FROM mytable2
编号 | 位置 | 价值
-: | --: | ----:
 1 | 1 | 1
 1 | 2 | 2
 1 | 3 | 3
 1 | 4 | 4
 1 | 5 | 5
 1 | 6 | 6

db<>在这里摆弄


推荐阅读