Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从一个表到另一个表添加行的最佳实践_Php_Mysql_Sql_Mysqli - Fatal编程技术网

Php 从一个表到另一个表添加行的最佳实践

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

我有一个开放式api提要,每小时为我的数据库提供一次提要。开放日数据库包含:MLS#、挂牌代理、挂牌办公室、地址、开放日、下一个开放日

我想创建一个新表,该表将保留开放日和下一个开放日的所有记录。我可以有重复的MLS,但需要有不同的开放日

开放日表格:本周

--------------------------------------
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子句组合这两个字段)。