2009-10-26 6 views
0

Ce que j'essaye de faire est de mettre la colonne de chaque requête d'insertion à la dernière valeur de $i Je n'ai jamais utilisé un déclencheur dans MySQL auparavant mais je crois que c'est le moyen le plus facile de le faire. Je serais ouvert à d'autres idées et suggestions. En ce moment je:Utiliser un déclencheur MySQL pour mettre à jour tous les champs correspondant à une condition

$i = 1; 
foreach($_FILES["upload_project_images"]["name"] as $key => $name) { 
     $p_image_query = " 
     delimiter | 
      CREATE TRIGGER update_start_num BEFORE INSERT ON project_images 
      FOR EACH ROW 
      BEGIN 
       UPDATE `project_images` SET `NEW.i_start_num` = '$i' WHERE `i_project_id` = '$prject_id' AND 'i_type' = '2'; 
      END | 
     delimiter; 
     INSERT INTO `project_images` (i_name, i_type, i_project_id,i_start_num) VALUES ('$upload_project_images_name', '2', '$project_id','$i');"; 

    $result=mysql_query($p_image_query) or die(mysql_error()); 
    $i++; 
    } 

L'idée est que i_start_num va égaler le dernier $i donc je peux ramasser là quand la mise à jour de la requête.

Ma première idée était d'exécuter une requête après la otherbut qui ne fonctionne pas non plus que j'ai essayé:

$i = 1; 
    foreach($_FILES["upload_project_images"]["name"] as $key => $name) { 
     //insert the file data into the database 
     $p_image_query = "INSERT INTO `project_images` (i_name, i_type, i_project_id,i_start_num) VALUES ('$upload_project_images_name', '2', '$project_id','$i')" 
     $result=mysql_query($p_image_query) or die(mysql_error()); 
    $i++; 

    //update the starting image id number on all project images 
     $p_update_startnum_qry ="UPDATE `project_images` SET `i_start_num` = '$i' WHERE `i_project_id` = '$prject_id' AND 'i_type' = '2'"; 
     $p_update_startnum_qry_result=mysql_query($p_update_startnum_qry) or die(mysql_error()); 
    } 

Ce qui a également échoué.

+0

Vous avez une erreur de syntaxe dans votre deuxième exemple. Pourriez-vous expliquer un peu plus sur ce que vous essayez de faire? Dans le deuxième exemple pourquoi mettez-vous à jour après l'insertion? Aussi, si vous incrémentez $ i avant la mise à jour, l'enregistrement que vous venez d'insérer en aura un de moins. –

Répondre

1

Hmm peut-être essayer ceci:

// pseudo code 
INSERT INTO `project_images` (i_name, i_type, i_project_id,i_start_num) 
VALUES ('$upload_project_images_name', '2', '$project_id','$i') 
ON DUPLICATE KEY UPDATE `project_images` 
SET `i_start_num` = '$i' 
WHERE `i_project_id` = '$prject_id' AND 'i_type' = '2' 
+0

Merci Phill, j'ai effectivement obtenu ce travail en exécutant la requête UPDATE en dehors de la boucle. Maintenant, le code passe à travers ajoute les images, après que toutes les images ont été insérées obtiendra la dernière valeur de $ i et mettra à jour tous les enregistrements avec cette valeur. Cela fonctionne très bien parce que je vais incrémenter automatiquement de sorte que le dernier sera toujours $ i = 1 qui sera le prochain numéro d'image. – BandonRandon

+0

Vous devez répondre à votre propre question et la sélectionner comme solution pour fermer le numéro/la question :) À la votre! –

Questions connexes