2010-11-09 2 views
0

Все еще изучает PHP. Я просто ударил кирпич и нуждаюсь в быстрой помощи. Никогда не занимался этим раньше. У меня есть код php ниже: мне просто нужно автоматизировать процесс. Мое намерение состоит в том, чтобы выбрать данные из таблицы холдинга, сделать некоторые манипуляции на нем, а затем вставить данные в постоянную таблицу в той же базе данных. Таким образом, пользователь может щелкнуть гиперссылку, и сценарий сделает это для него. Моя проблема заключается в том, как использовать результат из первого запроса в скрипте php ниже, следовательно, результат жаргонов, который вы указали ниже. Если вы меня поймете, как я могу сделать это? БлагодаряВставка результата 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

+0

Если вы просто хотите перекопать данные из одной таблицы в другую, я бы предложил вам использовать запрос * one * для этого, используя f.e. синтаксис 'INSERT INTO blabla (SELECT * FROM blibli). – Bobby

ответ

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

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

+0

@ibiangalex: Сколько записей было возвращено только оператором SELECT? И на что они похожи? Если типы данных не совпадают с вашими целевыми полями последовательно или если вы выбираете одинаковые строки, так что ограничение целевой таблицы UNIQUE KEY будет нарушено, вы не сможете вставить столько строк, сколько вы выберете. – dnagirl

+0

Спасибо dnagirl, 45 из 100 были возвращены. Сначала это были образцы данных. Ваша точка зрения правильная, мне нужно было удалить индексы перед выполнением вставки. Из-за характера данных, несомненно, будут дубликаты, которые я не знаю, как обращаться, выполняя вставку с помощью php-скрипта. Я знаю, что после удаления дубликатов. Большое спасибо за ваше полезное мнение. – ibiangalex

0

Вы можете сделать это в одном запросе. Просто INSERT строки, которые вы получаете с существующими SELECT.

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

Отъезд the docs для более подробной информации.

Смежные вопросы