2010-11-09 4 views
0

Encore apprentissage PHP. Je viens de frapper une brique et j'ai besoin d'aide rapide. Jamais géré cela avant. J'ai le code php ci-dessous: j'ai juste besoin d'automatiser un processus. Mon intention est de sélectionner des données à partir d'une table d'attente, de faire des manipulations dessus, puis d'insérer les données dans une table permanente dans la même base de données. Ainsi, un utilisateur peut cliquer sur un lien hypertexte et le script le fait pour lui. Mon problème est de savoir comment exploiter le résultat de la première requête dans le script php ci-dessous d'où le résultat des jargons que vous feriez ci-dessous. Si vous me comprenez, comment puis-je faire l'insertion? MerciInsertion du résultat de mysql_query() dans la même base de données

<?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

Demandez-vous la syntaxe INSERT INTO correcte? – Simon

+0

Si vous voulez juste pelleter des données d'une table à une autre, je suggère que vous utilisiez une requête * one * pour le faire, en utilisant f.e. la syntaxe 'INSERT INTO blabla (SELECT * FROM blibli)'. – Bobby

Répondre

0

Vous pouvez facilement combiner les deux:

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

C'est ce que je pense avoir fait au début mais les enregistrements retournés étaient rares – ibiangalex

1

Vous pouvez réellement le faire en une seule étape:

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

C'est ce que je pense avoir fait au début mais les enregistrements retournés étaient peu nombreux – ibiangalex

+0

@ibiangalex: Alors combien d'enregistrements sont renvoyés par l'instruction SELECT seule? Et à quoi ressemblent-ils? Si les types de données ne correspondent pas à vos champs cible de manière cohérente ou si vous sélectionnez des lignes identiques de sorte qu'une contrainte de clé UNIQUE de table cible soit violée, vous ne pourrez pas insérer autant de lignes que vous sélectionnez. – dnagirl

+0

Merci dnagirl, 45 sur 100 ont été retournés. C'était juste un échantillon de données au début. Votre point est exact, j'ai dû supprimer les index avant de faire l'insertion. En raison de la nature des données, il y aurait certainement des doublons que je ne sais pas comment gérer en faisant l'insertion avec le script php. Je sais que je pourrais enlever les doublons après. Merci beaucoup pour votre avis utile. – ibiangalex

0

Vous pouvez le faire dans une requête. Juste INSERT les lignes que vous obtenez avec votre existant SELECT.

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

Découvrez the docs pour plus de détails.

Questions connexes