IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Trigger de mise à jour des colonnes


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Etudiant du Genie Logiciel
    Inscrit en
    Juillet 2011
    Messages
    397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiant du Genie Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 397
    Par défaut Trigger de mise à jour des colonnes
    salut,

    comment mettre respectivement a jour les colonnes "name_nearest_place" et "distance_nearest_place" avec les colonnes "name" et "distance" de la table gs_object_data_xxxxxxxx.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE TRIGGER `t_gs_object_data_xxxxxx` AFTER INSERT ON `gs_object_data_xxxxxx`
     FOR EACH ROW BEGIN
    INSERT INTO nearest_marker(name,distance)
    SELECT get_distance_nearest(new.lat, new.lng, marker_lat, marker_lng) as distance, marker_name
    FROM gs_user_markers_share ORDER BY distance DESC LIMIT 1;
    UPDATE gs_object_data_xxxxxx
    SET name_nearest_place  = xxxxx,
    distance_nearest_place  = yyyyy ;
    END
    merci

  2. #2
    Membre très actif
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Par défaut
    1. Il faudra faire un SELECT d'abord
    2. Stocker les champs marker_name, distance dans des variables
    3. Puis les réutiliser dans les requêtes INSERT et UPDATE


    Comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    CREATE TRIGGER t_gs_object_data_xxxxxx AFTER INSERT ON gs_object_data_xxxxxx
    FOR EACH ROW 
    BEGIN
     
    	DECLARE alpha_distance decimal;
    	DECLARE alpha_name varchar(100);
     
    	SELECT marker_name, get_distance_nearest(new.lat, new.lng, marker_lat, marker_lng) as distance
    	INTO alpha_distance, alpha_name
    	FROM gs_user_markers_share
    	ORDER BY distance DESC
    	LIMIT 1;
     
    	INSERT INTO nearest_marker( name, distance ) VALUES ( alpha_name, alpha_distance );
    	UPDATE gs_object_data_xxxxxx SET name_nearest_place = alpha_name, distance_nearest_place = alpha_distance;
    END
    Est-ce qu'il ne manque pas un WHERE dans ton UPDATE ?

  3. #3
    Membre très actif
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Par défaut
    -- Pourquoi ne pas stocker les positions en utilisant le type géospatial POINT
    -- Distance entre deux points : ST_Distance()
    -- Par exemple (marker_lat, marker_lng) peuvent être stockées dans un seul champ de type POINT comment ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE t_gs_object_data_xxxxxx (
    	....
    	marker_name varchar(100),
    	position POINT DEFAULT NULL,
    	...
    );
    -- ce qui donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT marker_name, ST_Distance( new.position, position ) as distance
    INTO alpha_distance, alpha_name
    FROM gs_user_markers_share
    ORDER BY distance DESC
    LIMIT 1;

Discussions similaires

  1. [MySQL-5.7] Comparaison de deux tables - mise à jour des colonnes différentes
    Par jackoli dans le forum Requêtes
    Réponses: 5
    Dernier message: 27/10/2018, 16h51
  2. Réponses: 4
    Dernier message: 18/02/2011, 15h12
  3. Mise a jour des colonnes
    Par abbd dans le forum Windows Forms
    Réponses: 12
    Dernier message: 06/02/2008, 16h29
  4. Mise à jour des données dans une colonne
    Par BZH75 dans le forum SQL
    Réponses: 9
    Dernier message: 09/01/2008, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo