【问题标题】:Select From MySQL PHP从 MySQL PHP 中选择
【发布时间】:2011-01-13 04:47:21
【问题描述】:

先生, 我有一个名为“table1”的数据库表,有 9 列,即 id、日期、时间、名称、t1、t2、t3、t4、t5。我想将它插入到 table2 如下...

我现有的表:-

id  Date        Time   Name    t1   t2   t3   t4  t5
 1   10/11/2010  08:00  bob
 2   10/11/2010  09:00  bob
 3   10/11/2010  10:00  bob
 4   10/11/2010  13:00  bob
 5   10/11/2010  10:00  john
 6   10/11/2010  12:00  john
 7   10/11/2010  14:00  john
 8   12/11/2010  08:00  bob
 9   12/11/2010  09:00  bob
 10  12/11/2010  10:00  bob
 11  12/11/2010  13:00  bob
 12  12/11/2010  10:00  john
 13  12/11/2010  12:00  john
 14  12/11/2010  14:00  john
 15  12/11/2010  16:00  john 
 16  12/11/2010  08:00  Tom
 17  12/11/2010  17:00  Tom

我想插入到 table2 如下:-

id  Date          Name    t1      t2      t3      t4     t5
 1  110/11/2010    bob     08:00   09:00   10:00   13:00
 2  10/11/2010    john    10:00   12:00   14:00
 3  12/11/2010    bob     08:00   09:00   10:00   13:00
 4  12/11/2010    john    10:00   12:00   14:00   16:00
 5  12/11/2010    Tom     08:00   17:00   

我想将 table1 值插入 table2 是否可以这样插入,请帮助我..

丽菊

【问题讨论】:

  • “MySQL PHP”到底是什么意思?
  • 老兄,您需要以更好的格式编辑现有表和更新表
  • 您需要说明 t1、t2、t3、t4 和 t5 的含义,我们才能为您提供帮助。

标签: php mysql


【解决方案1】:

当然可以,你需要像这样做一个正确的UPDATE SQL 语句:

UPDATE table1 t 
SET t.t1 = '08:00', t.t2 = '09:00', t.t3 = '10:00', t.t4 = '13:00'
WHERE `Date` = '10/11/2010' AND `Time` = '08:00' AND `Name` = 'bob';

由于您有一个主键(例如行 id),您需要在 3 列上使用 WHERE 来进行更新。

Date / Time 应该有不同的命名,描述性的东西 entrydate / entrytime 等;

阅读您的 MYSQL 查询(更新/插入/删除等) 转至:http://dev.mysql.com/doc/

【讨论】:

    【解决方案2】:

    来自

    Date Time Name t1 t2 t3 t4 t5 
    10/11/2010 08:00 bob 
    10/11/2010 09:00 bob 
    10/11/2010 10:00 bob 
    10/11/2010 13:00 bob 
    10/11/2010 10:00 john 
    10/11/2010 12:00 john 
    10/11/2010 14:00 john 
    12/11/2010 08:00 bob 
    12/11/2010 09:00 bob 
    12/11/2010 10:00 bob 
    12/11/2010 13:00 bob 
    12/11/2010 10:00 john 
    12/11/2010 12:00 john 
    12/11/2010 14:00 john 
    12/11/2010 16:00 john
    

    Date Time Name t1 t2 t3 t4 t5 
    10/11/2010 08:00 bob 08:00 09:00 10:00 13:00 
    10/11/2010 10:00 john 10:00 12:00 14:00 
    12/11/2010 08:00 bob 08:00 09:00 10:00 13:00 
    12/11/2010 10:00 john 10:00 12:00 14:00 16:00
    

    这是处理步骤

    • 从表中选择并将所有变量存储在一个数组中
      • 其中 t1 为 NULL 或 t2 为 NULL 或 ....
    • 对表执行 UPDATE 并定义要更新的表
    • 您可能还需要使用标志更新已处理的表
    • 并删除剩余的表

    此过程非常不可靠并且需要大量性能。你可能有你想做的事情的理由,但我会考虑一种不同的方法。上面的流程步骤真的应该是解决这个问题的最后手段了

    如果你能更详细地解释一下你为什么这样做,我们可能会给你一个更好的解释

    【讨论】:

    • 一个主键可以是 3 个不同的列,它不必是唯一的增量列。发布者仍然可以进行更新,但需要查询 3 列作为标识符
    • 哦,对不起,你是对的,没有注意到日期的差异
    【解决方案3】:

    试试这个。 这绝对有效

    update table1 set 
    time2 = SUBSTRING(DATE_ADD(CONCAT_WS(' ',CONCAT_WS('-',SUBSTRING(date1,7,4), SUBSTRING(date1,1,2),SUBSTRING(date1,4,2)), time1), INTERVAL 1 HOUR), 12, 5 ), 
    time3 = SUBSTRING(DATE_ADD(CONCAT_WS(' ',CONCAT_WS('-',SUBSTRING(date1,7,4), SUBSTRING(date1,1,2),SUBSTRING(date1,4,2)), time1), INTERVAL 2 HOUR), 12, 5 );
    

    【讨论】:

      【解决方案4】:

      试试这个

      UPDATE table1 as t1
          SET 
          t1 = ( 
              SELECT
                  `Time`
              FROM
                  table1 as t2
              WHERE
                  t2.Date = t1.Date 
                  and t2.Name = t1.Name
              LIMIT 0,1
          ),
          t2 = ( 
              SELECT
                  `Time`
              FROM
                  table1 as t2
              WHERE
                  t2.Date = t1.Date 
                  and t2.Name = t1.Name
              LIMIT 1,1
          ),
          t3 = ( 
              SELECT
                  `Time`
              FROM
                  table1 as t2
              WHERE
                  t2.Date = t1.Date 
                  and t2.Name = t1.Name
              LIMIT 2,1
          ),
          t4 = ( 
              SELECT
                  `Time`
              FROM
                  table1 as t2
              WHERE
                  t2.Date = t1.Date 
                  and t2.Name = t1.Name
              LIMIT 3,1
          ),
          t5 = ( 
              SELECT
                  `Time`
              FROM
                  table1 as t2
              WHERE
                  t2.Date = t1.Date 
                  and t2.Name = t1.Name
              LIMIT 4,1
          );
      

      我没有运行这个查询,但希望它会起作用。

      在运行这个查询之后。不要忘记删除重复的行。

      它们也是选项,您可以使用 php 通过 group by 加载所有列,然后循环遍历并更新每一行。

      或者,如果您不想使用 php,那么您可以使用 MySQL 程序来执行此操作。无论如何,让我知道这是否有效。不然我就写php或者SP版本,显然效率更高

      【讨论】:

      • 我得到了按摩“当我输入此代码时,您无法在 FROM 子句中指定目标表 't1' 进行更新”
      猜你喜欢
      • 2015-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 2012-09-12
      • 2023-03-24
      • 2012-10-29
      • 2015-12-22
      相关资源
      最近更新 更多