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 :

Erreur requête sous MySQL 3


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 3
    Par défaut Erreur requête sous MySQL 3
    Bonjour à tous !
    Je vous appelle à l'aide pour la raison suivante : cette requête SQL
    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
    UPDATE products_description pd SET PRODUCTS_HEAD_TITLE_TAG = (
    	SELECT CONCAT(
    		ProDesc.categories_name,
    		' par ',
    		ArtDesc.categories_name,
    		' (',
    		StyDesc.categories_name,
    		')'
    	)
    	FROM products P
    	INNER JOIN products_to_categories CTP ON P.products_id = CTP.products_id
    	INNER JOIN categories C ON C.categories_id = CTP.categories_id
    	INNER JOIN categories_description ProDesc ON C.categories_id = ProDesc.categories_id
    	INNER JOIN categories CC ON C.parent_id = CC.categories_id
    	INNER JOIN categories_description ArtDesc ON CC.categories_id = ArtDesc.categories_id
    	INNER JOIN categories CCC ON CC.parent_id = CCC.categories_id
    	INNER JOIN categories_description StyDesc ON CCC.categories_id = StyDesc.categories_id
    	WHERE P.products_id = pd.products_id
    	LIMIT 1
    )
    fonctionne parfaitement sous MySQL5.
    Hélas pour moi, je dois l'exécuter sous MySQL 3.23 ! Et là, j'obtiens un affreux
    You have an error in your SQL syntax near 'pd SET PRODUCTS_HEAD_TITLE_TAG = ( SELECT CONCAT( ProDesc.categories_name, ' p' at line 1
    Pourriez-vous me tirer de l'embarras, en me proposant une façon de rendre ce code utilisable sous MySQL3 ? Merci d'avance !

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    A partir de la 3.23, tu peux utiliser une variable utilisateur :
    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
     
    SET @conc = SELECT CONCAT(
    		ProDesc.categories_name,
    		' par ',
    		ArtDesc.categories_name,
    		' (',
    		StyDesc.categories_name,
    		')'
    	) 
    	FROM products P
    	INNER JOIN products_to_categories CTP ON P.products_id = CTP.products_id
    	INNER JOIN categories C ON C.categories_id = CTP.categories_id
    	INNER JOIN categories_description ProDesc ON C.categories_id = ProDesc.categories_id
    	INNER JOIN categories CC ON C.parent_id = CC.categories_id
    	INNER JOIN categories_description ArtDesc ON CC.categories_id = ArtDesc.categories_id
    	INNER JOIN categories CCC ON CC.parent_id = CCC.categories_id
    	INNER JOIN categories_description StyDesc ON CCC.categories_id = StyDesc.categories_id
    	WHERE P.products_id = pd.products_id
    	LIMIT 1 ;
     
    UPDATE products_description pd
    SET PRODUCTS_HEAD_TITLE_TAG = @conc ;
    Sinon, en créant une table temporaire :
    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
    CREATE TEMPORARY TABLE Tempo
    	SELECT CONCAT(
    		ProDesc.categories_name,
    		' par ',
    		ArtDesc.categories_name,
    		' (',
    		StyDesc.categories_name,
    		')'
    	) AS Conc
    	FROM products P
    	INNER JOIN products_to_categories CTP ON P.products_id = CTP.products_id
    	INNER JOIN categories C ON C.categories_id = CTP.categories_id
    	INNER JOIN categories_description ProDesc ON C.categories_id = ProDesc.categories_id
    	INNER JOIN categories CC ON C.parent_id = CC.categories_id
    	INNER JOIN categories_description ArtDesc ON CC.categories_id = ArtDesc.categories_id
    	INNER JOIN categories CCC ON CC.parent_id = CCC.categories_id
    	INNER JOIN categories_description StyDesc ON CCC.categories_id = StyDesc.categories_id
    	WHERE P.products_id = pd.products_id
    	LIMIT 1 ;
    
    UPDATE products_description pd, Tempo
    SET PRODUCTS_HEAD_TITLE_TAG = Tempo.Conc ;

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 3
    Par défaut
    Merci beaucoup ! Je n'y aurais jamais pensé !
    Dois-je déduire de cette réécriture que MySQL3 ne prenait pas en charge les sous-requêtes ?
    Je testerai ça lundi quand je reprendrai le boulot. En attendant de pouvoir le vérifier, dois-je marquer le sujet comme résolu ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    effectivement, les sous-requêtes ne fonctionnent qu'à partir de la v 4.1.

    pour ce qui est du tag résolu... attends d'avoir testé !

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 3
    Par défaut
    Bonjour !
    Il n'aurait pas fallu que je tague "résolu" trop vite. Je n'arrive toujours pas à effectuer ma tâche.
    En effet, la ligne WHERE P.products_id = pd.products_id n'est plus correcte avec la nouvelle écriture, vu que l'on copie dans une table temporaire ou une variable, et non plus dans la table pd.
    Le soucis est que, sans cette ligne, je n'arrive pas à retrouver le résultat recherché. Je me retrouve avec 1 040 enregistrements alors que la table products_description n'en compte que 264...
    Je cherche encore ! Mais MySQL3 n'est définitivement pas ma tasse de thé.
    (au fait, il s'agit bien de MySQL 3.23)

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Comme ça alors ?

    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
    CREATE TEMPORARY TABLE Tempo
    	SELECT CONCAT(
    		ProDesc.categories_name,
    		' par ',
    		ArtDesc.categories_name,
    		' (',
    		StyDesc.categories_name,
    		')'
    	) AS Conc
    	FROM products P
    	INNER JOIN products_to_categories CTP ON P.products_id = CTP.products_id
    	INNER JOIN categories C ON C.categories_id = CTP.categories_id
    	INNER JOIN categories_description ProDesc ON C.categories_id = ProDesc.categories_id
    	INNER JOIN categories CC ON C.parent_id = CC.categories_id
    	INNER JOIN categories_description ArtDesc ON CC.categories_id = ArtDesc.categories_id
    	INNER JOIN categories CCC ON CC.parent_id = CCC.categories_id
    	INNER JOIN categories_description StyDesc ON CCC.categories_id = StyDesc.categories_id
            INNER JOIN products_description pd ON P.products_id = pd.products_id
    ;
    
    UPDATE products_description pd, Tempo
    SET PRODUCTS_HEAD_TITLE_TAG = Tempo.Conc ;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lancer une requête sous MySQL depuis un script Unix
    Par schranz dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 15/07/2014, 15h45
  2. requête sous Mysql
    Par Mhamed_dev dans le forum Requêtes
    Réponses: 1
    Dernier message: 02/08/2010, 09h34
  3. Sous-requête sous mysql 3
    Par photorelief dans le forum Requêtes
    Réponses: 1
    Dernier message: 07/06/2006, 11h16
  4. Erreur "Unknown column" dans un JOIN sous MySQL 5.0
    Par bibiloute dans le forum Requêtes
    Réponses: 5
    Dernier message: 28/04/2006, 09h16
  5. [MySQL] erreur avec sous-requête
    Par Piou2fois dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/02/2006, 13h44

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