【问题标题】:PHP, MySQL, Merge 2 tables into 1, but if there is same value in row change valuePHP,MySQL,将2个表合并为1个,但如果行更改值中的值相同
【发布时间】:2017-11-06 12:25:21
【问题描述】:

所以我有两个具有相同列的表,并且里面有相同类型的值。 让我们称它们为 table_1 和 table_2。问题是我想将它们合并到一个名为 table_3 的表中。

我遇到的问题是 table_1 和 table_2 中的一些值是相同的,当这种情况发生时我需要更改一些值。

table_1 是这样的

表_1

id、record_id、stuff_to_change、something_else

table_2 是这样的

表 2

id、record_id、stuff_to_change、something_else

这就是 table_3 的样子

表 3

id、record_id、stuff_to_change、something_else

现在的问题是,我需要比较 table_1 和 table_2 中的 record_id,如果它们不同,只需将其复制到 table_3,如果不同,我需要更改 table_3 中的 stuff_to_change。它需要有不同的价值。

所以在伪代码中应该是这样的:

for(i=0;i<end_of_table;i++)
{
   for(j=0;j<end_of_second_table;j++)
   {
       if(record_id[i]==record_if[j]
       {
            record_id[i].stuff_to_change='SOMETHING';
            mysqli_query($conn, "INSERT INTO table_3 (record_id, stuff_to_change, something_else) VALUES (record_id[i],stuff_to_change[i],something_else[i]");
       }else{
            mysqli_query($conn, "INSERT INTO table_3 (record_id, stuff_to_change, something_else) VALUES (record_id[i],stuff_to_change[i],something_else[i]");
       }           
   }
}

这个伪代码不完整,我不知道该怎么做。所以将两张表合二为一,但如果record_id中的值相同,则更改stuff_to_change,如果record_id是唯一的,则只需将其复制到table_3。还需要注意的是,如果 2 个表中有相同的 record_id,我不需要它们两个,只需要 1 个,但具有不同的 stuff_to_change 值。

我将非常感谢您的帮助,我尝试了 union,并将其解析为 php 中的值,但对我没有任何作用

【问题讨论】:

  • 添加“类型”列并仅指定 1、2 或 3 似乎更有效? (或者,多个值甚至组合在一起,并对必须唯一的内容添加唯一约束)您是否有特定理由为相同的数据结构使用单独的表?使用一个表或中间链接表似乎更容易和更快
  • 感谢重播,但是是的,table_1 和 table_2 来自不同的来源......这就是为什么我需要将它们结合起来

标签: php mysql xampp


【解决方案1】:

您可以使用CREATE TABLE ... SELECT 声明。

INSERT INTO table3 
SELECT * FROM tabel1
UNION
SELECT * FROM tabel2

因为您在所有三个中都有相同的列...

在一般情况下,您应该使用类似的列列表

INSERT INTO table3 (col1, col2, col3)
SELECT col1, col2, col3 FROM tabel1
UNION
SELECT col1, col2, col3 FROM tabel2

这样可以避免 auto_increment id-columns 的麻烦。此外,您应该考虑使用 UNION ALL,因为 UNION 会过滤掉重复的行,因此在大型表上会花费更长的时间。

这可能会帮助您解决问题。

【讨论】:

    猜你喜欢
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 2013-02-14
    • 1970-01-01
    • 2014-07-22
    • 2021-08-20
    • 2016-05-29
    相关资源
    最近更新 更多