Php 如果另一个表具有匹配的字段值,如何更新数据库表的1个字段或2个字段?

Php 如果另一个表具有匹配的字段值,如何更新数据库表的1个字段或2个字段?,php,mysql,sql,Php,Mysql,Sql,假设我有一个包含以下列和值的表: id field ----------- 1 0001 2 0002 3 0003 4 0004 5 0005 id tid info_1 field_1 info_2 field_2 --------------------------------------------------- 1 1 7 0000 null null

假设我有一个包含以下列和值的表:

id    field
-----------
1     0001
2     0002
3     0003
4     0004
5     0005
id    tid    info_1    field_1    info_2    field_2
---------------------------------------------------
1     1      7         0000       null      null
2     2      null      null       10        0002
3     3      17        0003       null      null
4     4      29        1111       null      null
5     6      null      null       44        0005
然后我有另一个表,其中包含这些字段和值:

id    field
-----------
1     0001
2     0002
3     0003
4     0004
5     0005
id    tid    info_1    field_1    info_2    field_2
---------------------------------------------------
1     1      7         0000       null      null
2     2      null      null       10        0002
3     3      17        0003       null      null
4     4      29        1111       null      null
5     6      null      null       44        0005
我需要一个更新查询来更新表2的记录,仅在info列中,但仅当表1在表2中有匹配的字段时,并且仅当第一个表的id和第二个表的tid匹配时

例如,表1的id为1,表2的tid为1匹配,但字段_1或字段_2的字段号与表1不同

表1 id为2,表2 tid为2匹配,字段_2有一个匹配的数字作为表1中的字段,因此我想将表2记录2的信息_2更改为我选择的数字。我们就说50吧。在所有情况下,信息1或信息2中的数字都将更改为50

现在,表1 id为3,表2 tid为3匹配,字段_1的匹配号为表1中的字段,因此我需要将表2中第三条记录的信息_1更改为50

在记录4中,id和tid匹配,但没有字段匹配,因此跳过该字段

在记录5中,即使表2的字段_2与表1中的字段匹配,但第一个表的id与第二个表的tid不匹配,因此可以跳过第五条记录

以下是我迄今为止所做的尝试:

$updatequery1 = "UPDATE table2 LEFT JOIN table1 a ON a.field = field_1 SET info_1 = 50";
$updateresult1 = mysql_query($updatequery1) or die(mysql_error());
所以在第一次尝试中,我没有将id和tid设置为匹配,我只是直接查找字段匹配。我也没有合并字段2。甚至不确定是否可以一次完成所有操作,或者是否需要多个查询。在任何情况下,即使没有字段匹配,此尝试也会使所有info_1值等于50

有人能帮我做这个查询吗?如果可能的话,让两个信息列同时更改吗

如果我要执行一个select查询来选择表1 id和表2 tid中匹配的所有记录,它将是这样的,但不知道如何将其合并到更新查询中

SELECT table1.*, table2.*
FROM table1
LEFT JOIN table2
ON table1.id = table2.tid
我也可以尝试合并字段匹配,它可能是这样的:

SELECT table1.*, table2.*
FROM table1
LEFT JOIN table2
ON table1.id = table2.tid
WHERE table1.field = table2.field_1
OR table1.field = table2.field_2
但同样,我不知道如何将其转换为更新查询,从而使info_1或info_2相应地改变


因此,我们需要以更快的方式进行总结。如果id和tid匹配,字段和字段_1匹配,则信息_1应更改为50。如果id和tid匹配,field和field_2匹配,info_2应该更改为50

您可以在
集合中使用
CASE
语句

UPDATE Table2 as T2
JOIN Table1 T1
ON T2.tid = T1.id
set 
info_1 = CASE WHEN T2.field_1 = T1.field then 50 ELSE T2.field_1 END  ,
info_2 = CASE WHEN T2.field_2 = T1.field then 50 ELSE T2.field_2 END 

用一个案例陈述就可以了<当t1.id=t2时,代码>设置t2.info_1=CASE。然后我将设置50个ELSE NULL END