2010-11-09 48 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瞭解更多詳情。

相關問題