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

Requêtes MySQL Discussion :

Requête update avec un select sur la même table


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 488
    Points : 134
    Points
    134
    Par défaut Requête update avec un select sur la même table
    Bonjour,

    J'essaie de faire cette requête, par contre bizarrement mysql ne semble pas accepter mon select sur la même table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE manager_users 
    SET nodes_access_agences  = (SELECT (SUBSTR(nodes_access, 3))
    FROM manager_users where nodes_access like 'Ag%')
    Comment contourner le poblème?

    Merci d'avance

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Bonjour,

    Il n'est pas nécessaire de faire un SELECT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE manager_users 
    SET nodes_access_agences  = SUBSTR(nodes_access, 3)
    WHERE nodes_access LIKE 'Ag%'
    ced

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 488
    Points : 134
    Points
    134
    Par défaut
    ok ca marche nikel merci!

    J'ai un autre problème pour cette requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT create_date
    FROM manager_users, agences
    WHERE agences.agence_id = manager_users.nodes_access_agences
    AND manager_users.nodes_access_agences != " "
    J'obtiens 209 résultats.

    Par contre quand j'essaie d'affecter le résultat de ma requête à un champs il ne me remplit rien??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    update agences
    set agences.dateCreation=(SELECT create_date
    FROM manager_users
    WHERE agences.agence_id = manager_users.nodes_access_agences
    AND manager_users.nodes_access_agences != " "
    Vous voyez d'ou ça peut venir?

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Oui, la syntaxe n'est pas bonne.
    Essaie plutôt comme çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE agences
    INNER JOIN manager_users ON agences.agence_id = manager_users.nodes_access_agences
    SET agences.dateCreation = manager_users.create_date
    WHERE manager_users.nodes_access_agences != " "
    Je n'ai pas testé, mais c'est plutôt l'idée

    ced

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 488
    Points : 134
    Points
    134
    Par défaut
    Bien vu...mais ça ne marche tjs pas alors que je retrouve bien mes 209 enregistrement en faisant cette requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM agences, manager_users
    WHERE agences.agence_id = manager_users.nodes_access_agences

  6. #6
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Pour pouvoir t'aider, il va nous falloir un peu plus d'infos que "ça ne marche toujours pas"...
    Peux-tu nous donner le schéma des tables, quelques exemples de données les composants, et le résultat que tu souhaites obtenir par l'update...

    ced

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 488
    Points : 134
    Points
    134
    Par défaut
    Voici le shéma de la table agences:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    CREATE TABLE `agences` (
     `agence_id` int(11) NOT NULL AUTO_INCREMENT,
     `TempoId` varchar(255) DEFAULT NULL,
     `agence_active` tinyint(1) NOT NULL DEFAULT '0',
     `cli_id` int(11) NOT NULL DEFAULT '0',
     `agence_site` smallint(2) unsigned zerofill NOT NULL DEFAULT '00',
     `agence_rs` varchar(255) NOT NULL DEFAULT '',
     `agence_adresse1` varchar(255) NOT NULL DEFAULT '',
     `agence_adresse2` varchar(255) NOT NULL DEFAULT '',
     `agence_pays` int(3) NOT NULL DEFAULT '0',
     `agence_region` char(3) DEFAULT '0',
     `agence_cp` int(5) NOT NULL DEFAULT '0',
     `agence_ville` varchar(255) NOT NULL DEFAULT '',
     `agence_ville_id` int(11) DEFAULT NULL,
     `agence_lat` double NOT NULL DEFAULT '0',
     `agence_long` double NOT NULL DEFAULT '0',
     `agence_tel` varchar(20) DEFAULT NULL,
     `agence_fax` varchar(20) DEFAULT NULL,
     `agence_mail` varchar(255) DEFAULT NULL,
     `agence_commercial` varchar(50) DEFAULT NULL,
     `agence_web` varchar(255) DEFAULT NULL,
     `agence_webpi` varchar(255) DEFAULT NULL,
     `agence_quota` int(11) DEFAULT NULL,
     `AgenceOuSiege` enum('agence','siege') DEFAULT 'agence',
     `NomParent_bk` varchar(64) DEFAULT NULL COMMENT 'A utiliser pour rétablir le cli_id après import massif',
     `agence_cvRequired` tinyint(1) DEFAULT NULL,
     `agence_actualiseAnnonce` tinyint(1) NOT NULL DEFAULT '0',
     `agence_dateCreation` datetime DEFAULT NULL,
     `agence_date_debPeriodeEssai` datetime DEFAULT NULL,
     `agence_date_finPeriodeEssai` datetime DEFAULT NULL,
     PRIMARY KEY (`agence_id`),
     KEY `cli_id` (`cli_id`),
     CONSTRAINT `agences_ibfk_1` FOREIGN KEY (`cli_id`) REFERENCES `clients` (`cli_id`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB AUTO_INCREMENT=694 DEFAULT CHARSET=latin1


    La table manager_users:

    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
    18
    CREATE TABLE `manager_users` (
     `user_id` int(11) NOT NULL AUTO_INCREMENT,
     `login` varchar(25) DEFAULT NULL,
     `password` varchar(40) DEFAULT NULL,
     `civilite` varchar(5) DEFAULT 'M.',
     `first_name` varchar(50) DEFAULT 'x',
     `last_name` varchar(50) DEFAULT 'x',
     `email` varchar(255) NOT NULL,
     `group_id` int(5) DEFAULT NULL,
     `nodes_access` text NOT NULL,
     `active` tinyint(4) DEFAULT NULL,
     `create_date` datetime DEFAULT NULL,
     `update_date` datetime DEFAULT NULL,
     `access_date` datetime DEFAULT '0000-00-00 00:00:00',
     `nodes_access_agences` text NOT NULL,
     PRIMARY KEY (`user_id`),
     UNIQUE KEY `login` (`login`)
    ) ENGINE=MyISAM AUTO_INCREMENT=536 DEFAULT CHARSET=latin1
    Voilà un enregistrement de la table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    user_id :1
    login: cam    
    password: 123456    
    civilite: M.    
    first_name: x    
    last_name: x    
    email: x@x.fr     
    group_id: 3    
    nodes_access: Ag374     
    active: 1    
    create_date :    2009-10-02 10:31:58
    update_date : 2009-10-02 10:31:58    
    access_date : 2010-06-28 16:23:50    
    nodes_access_agences :374 -> correspond au nodes_access sans le Ag--> je récupère donc l'id de l'Agence (c'est l'agence_id de la table agence) c'est une agence parce group_id=3
    Je veux juste récupérer la valeur du champs 'create_date' de la table manager_users dans le champs 'agence_dateCreation' de la table agences quand les id sont équivalents ( node_access_agence et agence_id).

    J'espère avoir été suffisamment clair cette fois.

    Encore merci!

Discussions similaires

  1. une requête avec 2 count sur la même table
    Par epeichette dans le forum Requêtes
    Réponses: 11
    Dernier message: 30/06/2009, 09h19
  2. UPDATE avec SELECT sur la même table
    Par Invité dans le forum Langage SQL
    Réponses: 7
    Dernier message: 07/12/2007, 03h39
  3. Requête update avec un select
    Par housni dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 11/08/2007, 00h22
  4. Update avec un select sur la même table
    Par Xunil dans le forum Administration
    Réponses: 5
    Dernier message: 09/04/2007, 16h40
  5. pb d'insertion avec un SELECT sur une autre table
    Par epeichette dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/01/2005, 22h58

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