我有两张桌子(“z”和“z_ao”)。 “z”包含美国的所有邮政编码以及其他所需信息。 “z_ao”仅包含某些邮政编码。我想在“z”的每一行中将“ls”列设置为“1”,其中“z”中的“zip”与“z_ao”中的“zip”匹配。
我一整天都在阅读以确定“正确”这样做的方式,我认为这会使用JOIN但却令人沮丧地感到困惑,在这种情况下,这是一次性操作,所以我最终做了以下事情笨拙,查询密集的方式:
$z = mysql_query("SELECT zip_code FROM z");
while($z_row = mysql_fetch_row($z)) {
$zao = mysql_query("SELECT zip FROM z_ao WHERE zip='$z_row[0]'");
$zao_num=mysql_numrows($zao);
if (mysql_numrows($zao) == 1) {
mysql_query("UPDATE z SET ls = '1' WHERE zip_code='$z_row[0]'");
}
}
我很遗憾寻求帮助,因为我知道答案已经存在,但为了将来的参考,我想了解这样做的正确方法,我想我需要看一个确切的例子。
谢谢。
答案 0 :(得分:5)
尝试多表更新:
UPDATE z INNER JOIN z_ao ON z.zip_code = z_ao.zip SET z.ls='1'
您无需进行任何计数或测试或循环。 JOIN会为您匹配行,并自动排除z_ao表中不匹配的邮政编码。
答案 1 :(得分:2)
IN ...怎么样?
update z set ls = 1 where zip_code IN ( select zip_code from z_ao );