Php 从一个表到另一个表添加行的最佳实践
我有一个开放式api提要,每小时为我的数据库提供一次提要。开放日数据库包含:MLS#、挂牌代理、挂牌办公室、地址、开放日、下一个开放日 我想创建一个新表,该表将保留开放日和下一个开放日的所有记录。我可以有重复的MLS,但需要有不同的开放日 开放日表格:本周Php 从一个表到另一个表添加行的最佳实践,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我有一个开放式api提要,每小时为我的数据库提供一次提要。开放日数据库包含:MLS#、挂牌代理、挂牌办公室、地址、开放日、下一个开放日 我想创建一个新表,该表将保留开放日和下一个开放日的所有记录。我可以有重复的MLS,但需要有不同的开放日 开放日表格:本周 -------------------------------------- MLS | Open Date | Next Open Date 12433 | 6/24/15 | 6/25/15 23223
--------------------------------------
MLS | Open Date | Next Open Date
12433 | 6/24/15 | 6/25/15
23223 | 6/22/15 | 6/23/15
35325 | 6/23/15 | 7/01/15
--------------------------------------
开放日餐桌:上周
--------------------------------------
MLS | Open Date | Next Open Date
12433 | 6/15/15 | n/a
23223 | 6/18/15 | 6/20/15
35325 | 6/07/15 | n/a
--------------------------------------
所有开放日历史记录表:
--------------------------------------
MLS | Open Date | Next Open Date
12433 | 6/24/15 | 6/25/15
23223 | 6/22/15 | 6/23/15
35325 | 6/23/15 | 7/01/15
12433 | 6/15/15 | n/a
23223 | 6/18/15 | 6/20/15
35325 | 6/07/15 | n/a
--------------------------------------
历史记录表可以有相同的mls,但不能有相同的打开日期和下一个打开日期
我试过:
INSERT INTO open_house_history (mls_id, open_date, next_open_date)
SELECT mls_id, open_date, next_open_date
FROM open_house
WHERE open_date NOT IN (SELECT open_date FROM open_house_history)
AND mls_id IN (SELECT mls_id FROM open_house_history)
请帮忙!
谢谢您的查询有问题,因为您排除了表中已存在打开日期的所有记录
WHERE open_date NOT IN (SELECT open_date FROM open_house_history)
如果您在同一日期获得不同的列表,它将被排除在外。具有相同ID但日期不同的列表也将被排除在外
在这种情况下,我将所有字段合并为一个字符串,并使用该字符串进行比较:
INSERT INTO open_house_history (mls_id, open_date, next_open_date)
SELECT mls_id, open_date, next_open_date
FROM open_house
WHERE CONVERT(VARCHAR(8), open_date, 112) + '|' + mls_id NOT IN (SELECT CONVERT(VARCHAR(8), open_date, 112) + '|' + mls_id FROM open_house_history)
到目前为止你试过什么?还是你要我们写代码?可能的答案太多,或者好的答案对于这种格式来说太长。请添加详细信息,以缩小答案集或隔离一个可以在几段中回答的问题。我建议您找一个发展论坛(也许?)来总结概括。然后,当您遇到特定的编码问题时,请回到StackOverflow,我们很乐意提供帮助。那么您尝试的SQL到底有什么问题呢?它出错了吗?你得到了错误的结果吗?它似乎不正常工作@MureinikI发布了一个sql查询,它似乎与我想要的东西不起作用@TvGemert我为什么要将其转换为varchar?它是一个datetime字段。您可以转换日期,以便将其与MLS ID组合在一个文本字段中,以便检查以前是否添加了该组合。如果您检查其中一个,您将忽略具有相同日期的其他MLS ID和具有不同日期的相同MLS ID。是否有更简单的方法来实现这一点。似乎我们创建了一个额外的列。您可以改为在MSL ID和日期上左键连接历史记录表,并插入历史记录表的MLS_ID为NULL的列,但这将需要更多的工作(尽管您不必为where子句组合这两个字段)。