2010-11-09 46 views
0

仍在学习PHP。我只是碰到一块砖头,需要一些快速的帮助。之前从未处理过。我有下面的PHP代码:我只需要自动化一个过程。我的意图是从保存表中选择数据,对其进行一些处理,然后将数据插入到同一数据库中的永久表中。所以用户可以点击一个超链接,脚本为他做这件事。我的问题是如何利用下面的php脚本中的第一个查询的结果,因此下面的jargons的结果。如果你了解我,我怎么做插入?由于将mysql_query()的结果插入到同一个数据库中

<?php 
include 'db.inc.php'; 
$sql = "SELECT nmea, rmc_time, signal, ROUND((FLOOR(latitude/ 100) + (latitude - 100 * FLOOR(latitude/ 100))/60), 5), north, ROUND((FLOOR(longitude/100) + (longitude - 100 * FLOOR(longitude/100))/60), 5), east, speed, track_angle, str_to_date(rmc_date, '%d%m%y') FROM server_imports"; 

$result = mysql_query($sql, $link); 
if (!$result) { 
    die("Query to convert and insert failed"); 
} 
while ($row = mysql_fetch_assoc($result)){ 
    mysql_query("INSERT INTO server_main(server_nmea, server_rmc_time, signal, server_latitude, north, server_longitude, east, speed, track_angle, server_rmc_date"); 

} 
echo "Data conversion and insertion completed"; 
    ?> 
+0

您是否要求正确的INSERT INTO语法? – Simon 2010-11-09 14:11:31

+0

如果您只是想将数据从一个表格移动到另一个表格,我建议您使用*一个*查询来做到这一点,使用f.e. INSERT INTO blabla(SELECT * FROM blibli)'语法。 – Bobby 2010-11-09 14:14:25

回答

0

您可以轻松地将二者结合起来:

INSERT INTO server_main(server_nmea, server_rmc_time, signal, server_latitude, 
north, server_longitude, east, speed, track_angle, server_rmc_date) 
SELECT nmea, rmc_time, signal, 
ROUND((FLOOR(latitude/ 100) + (latitude - 100 * FLOOR(latitude/ 100))/60), 5), north, 
ROUND((FLOOR(longitude/100) + (longitude - 100 * FLOOR(longitude/100))/60), 5), east, 
speed, track_angle, str_to_date(rmc_date, '%d%m%y') 
FROM server_imports 
+0

这就是我认为我最初做的,但返回的记录很少 – ibiangalex 2010-11-09 14:19:11

1

实际上,你可以做到这一切在一个步:

INSERT INTO server_main(server_nmea, server_rmc_time, signal, 
    server_latitude, north, server_longitude, 
    east, speed, track_angle, server_rmc_date) 
SELECT nmea, rmc_time, signal, 
    ROUND((FLOOR(latitude/ 100) + (latitude - 100 * FLOOR(latitude/ 100))/60), 5), 
    north, ROUND((FLOOR(longitude/100) + (longitude - 100 * FLOOR(longitude/100))/60), 5), 
    east, speed, track_angle, 
    str_to_date(rmc_date, '%d%m%y') 
FROM server_imports; 
+0

这就是我认为我最初做的,但返回的记录很少 – ibiangalex 2010-11-09 14:20:05

+0

@ibiangalex:那么SELECT语句单独返回多少条记录?他们看起来像什么?如果数据类型不一致地匹配您的目标字段,或者如果您选择相同的行从而违反目标表UNIQUE KEY约束,则将无法插入您选择的行数。 – dnagirl 2010-11-09 14:37:06

+0

谢谢dnagirl,45个100退还。这仅仅是一个样本数据。你的观点是对的,我必须在插入前删除索引。由于数据的性质,肯定会有重复,我不知道如何处理,而使用PHP脚本插入。我知道我可以在删除之后重复。非常感谢您的有用意见。 – ibiangalex 2010-11-09 16:21:52

0

你能做到在一个查询。只需INSERT即可获得您现有的SELECT的行。

INSERT INTO [...] SELECT [...] 

查看the docs了解更多详情。

相关问题