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

Langage SQL Discussion :

Transformer une requête imbriquée


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut Transformer une requête imbriquée
    Bonjour,
    Je voudrais transformer cette requête qui marche en local sous easy php mais qui ne fonctionne pas sur le serveur à cause du DISTINCT, j'ai essayé de la faire avec une jointure mais j'y suis pas arrivé.
    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
    SELECT
              p.id,
              p.nom_".$_SESSION['langue'].",
              p.image1,
              p.prix
      FROM peel_produits p,
              peel_commandes_articles ca
      WHERE p.id = ca.produit_id
          AND ca.commande_id IN (SELECT DISTINCT 
              commande_id FROM peel_commandes_articles
              WHERE produit_id= '".$prod['id']."')
          AND p.id NOT LIKE '".$prod['id']."'
      LIMIT 2
      ;")
              or DIE('Une erreur de connexion &agrave; la base s est produite ' . __LINE__ . '.<p>' . MYSQL_ERROR());
    Merci d'avance a ceux qui pourront m'aider

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 118
    Points : 28 507
    Points
    28 507
    Par défaut
    Je ne vois pas l'intérêt du DISTINCT dans le IN ()

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par al1_24
    Je ne vois pas l'intérêt du DISTINCT dans le IN ()
    Bonjour,
    Merci pour ta réponse al1_24, sans le DISTINCT ca marche toujours en local mais pas sur le serveur, je vais essayé de contacter l'hebergeur pour voir ce qu'il peut faire.

  4. #4
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    quelle version de MySQL par hasard ?

  5. #5
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Yanika_bzh
    quelle version de MySQL par hasard ?
    Bonjour je vous donne l'entête de l'export de la base de donnée

    phpMyAdmin SQL Dump
    -- version 2.6.4-pl3
    -- http://www.phpmyadmin.net
    --
    -- Généré le : Mardi 26 Juin 2007 à 14:03
    -- Version du serveur: 4.0.25
    -- Version de PHP: 4.3.10-200.schlund.1
    --

    Apparament il s'agit de MySQL4.0

    Je ne suis toujours pas arrivé a faire marché cette requête sur le serveur et j'attend des nouvelles de l'hebergeur.
    Merci.

  6. #6
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    pas de requete imbriqué avant la 4.1 pour MySQL
    voir la FAQ

  7. #7
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Cybher
    pas de requete imbriqué avant la 4.1 pour MySQL
    voir la FAQ
    Merci pour ta réponse je dois donc transformer la requête avec une jointure, si tu peux m'aider à le faire ca serait sympas, je suis pas trés calé en SQL.
    Merci d'avance.

  8. #8
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    essaie plutot de comprendre (la FAQ te donne un exemple)
    après on te corrigera si tu as des erreurs mais essaie au moins
    c'est comme ca qu'on apprend (c'est mon ptit coté moralisateur... )

  9. #9
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Je galère encore avec cette requête j'ai essayé comme ça :
    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
     
    SELECT
    	  p.id,
              p.nom_".$_SESSION['langue'].",
              p.image1,
              p.prix
              FROM peel_produits p,
              peel_commandes_articles ca
              WHERE p.id = ca.produit_id
              AND ca.produit_id = ca.commande_id  
    	  AND produit_id= '".$prod['id']."'
              AND p.id NOT LIKE '".$prod['id']."'
              LIMIT 2
              ;")
              or DIE('Une erreur de connexion &agrave; la base s est produite ' . __LINE__ . '.<p>' . MYSQL_ERROR());
    Je n'est plus de message d'erreur par contre la requête ne renvoie aucune infos.
    On m'a dit de la faire avec INNER JOIN mais j'ai pas tout compris.
    Si une bonne âme pourrait m'aider a la réaliser une bonne fois pour toute ça serait coolos.
    Merci d'avance.

  10. #10
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Je n'arrive toujours pas a transformer cette requête avec une jointure si quelqu'un peut m'aider.
    Merci d'avance.

  11. #11
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Bonjour,

    Si vous voulez de l'aide, un desriptif des tables ainsi qu'un jeu d'essai serait tres pratiques.

    D'un premier coup d'oeil sur votre requete, quelque chose me parait etrange

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND ca.produit_id = ca.commande_id
    Bon courage

  12. #12
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Je vous donne le schéma des tables :
    Table "peel_produits"
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    CREATE TABLE `peel_produits` (
      `id` int(11) NOT NULL auto_increment,
      `alpha` char(1) binary NOT NULL default '',
      `reference` varchar(100) NOT NULL default '',
      `nom_fr` varchar(255) NOT NULL default '',
      `descriptif_fr` text NOT NULL,
      `description_fr` text NOT NULL,
      `nom_en` varchar(255) binary NOT NULL default '',
      `descriptif_en` text NOT NULL,
      `description_en` text NOT NULL,
      `image1` varchar(255) binary NOT NULL default '',
      `image2` varchar(255) binary default NULL,
      `image3` varchar(255) binary default NULL,
      `image4` varchar(255) binary NOT NULL default '0',
      `prix` float(10,2) NOT NULL default '0.00',
      `prix_revendeur` float(10,2) NOT NULL default '0.00',
      `poids` float(10,2) NOT NULL default '0.00',
      `points` int(11) NOT NULL default '0',
      `date_insere` date NOT NULL default '0000-00-00',
      `date_maj` date NOT NULL default '0000-00-00',
      `promotion` float(5,2) NOT NULL default '0.00',
      `tva` float(5,2) NOT NULL default '0.00',
      `etat` int(1) NOT NULL default '0',
      `on_stock` tinyint(4) NOT NULL default '0',
      `delai_stock` varchar(100) binary NOT NULL default '',
      `seuil_stock` int(11) NOT NULL default '0',
      `affiche_stock` tinyint(4) NOT NULL default '0',
      `on_promo` tinyint(4) NOT NULL default '0',
      `on_new` tinyint(4) NOT NULL default '0',
      `on_rollover` tinyint(4) NOT NULL default '0',
      `on_special` tinyint(4) NOT NULL default '0',
      `on_perso` tinyint(4) NOT NULL default '0',
      `on_top` tinyint(4) NOT NULL default '0',
      `comments` tinyint(4) NOT NULL default '0',
      `position` int(3) NOT NULL default '0',
      `meta_titre` text NOT NULL,
      `meta_desc` text NOT NULL,
      `meta_key` text NOT NULL,
      `on_flash` tinyint(4) NOT NULL default '0',
      `flash_start` datetime NOT NULL default '0000-00-00 00:00:00',
      `flash_end` datetime NOT NULL default '0000-00-00 00:00:00',
      `marque` varchar(255) binary NOT NULL default '',
      `reference_fournisseur` varchar(100) binary NOT NULL default '',
      `cost_guides` float(13,2) NOT NULL default '0.00',
      `etat_stock` tinyint(4) NOT NULL default '0',
      `lang` char(2) binary default NULL,
      `prix_promo` float(5,2) default NULL,
      `paiement` varchar(255) binary default NULL,
      `type_prix` varchar(255) binary default NULL,
      `nom_de` varchar(255) binary NOT NULL default '',
      `descriptif_de` text NOT NULL,
      `description_de` text NOT NULL,
      `nom_es` varchar(255) binary NOT NULL default '',
      `descriptif_es` text NOT NULL,
      `description_es` text NOT NULL,
      `on_check` tinyint(4) NOT NULL default '0',
      `mp3` varchar(64) NOT NULL default '',
      `pdf` varchar(25) NOT NULL default '',
      `id_ecotaxe` int(11) NOT NULL default '0',
      `extrait` varchar(64) NOT NULL default '',
      `on_download` tinyint(4) NOT NULL default '0',
      PRIMARY KEY  (`id`),
      KEY `marque` (`marque`)
    ) TYPE=MyISAM AUTO_INCREMENT=19 ;
    Table "peel_commandes_articles"
    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
    35
     
    CREATE TABLE `peel_commandes_articles` (
      `commande_id` int(11) NOT NULL default '0',
      `produit_id` int(11) NOT NULL default '0',
      `nom_produit` varchar(255) binary NOT NULL default '',
      `prix` float(10,2) NOT NULL default '0.00',
      `prix_ht` float(10,2) NOT NULL default '0.00',
      `prix_cat` float(10,2) NOT NULL default '0.00',
      `prix_cat_ht` float(10,2) NOT NULL default '0.00',
      `total_prix` float(13,2) NOT NULL default '0.00',
      `total_prix_ht` float(13,2) NOT NULL default '0.00',
      `quantite` int(11) NOT NULL default '0',
      `promotion` float(5,2) NOT NULL default '0.00',
      `remise_produit` float(5,2) NOT NULL default '0.00',
      `tva` float(5,2) NOT NULL default '0.00',
      `tva_percent` float(5,2) NOT NULL default '0.00',
      `couleur` varchar(150) binary NOT NULL default '',
      `taille` varchar(150) binary NOT NULL default '',
      `comment` varchar(255) binary NOT NULL default '',
      `delivery_stock` varchar(100) binary NOT NULL default '',
      `order_stock` int(11) NOT NULL default '0',
      `option_prix` int(11) NOT NULL default '0',
      `dispo` int(1) NOT NULL default '0',
      `points` int(11) NOT NULL default '0',
      `poids` float(10,2) NOT NULL default '0.00',
      `email_check` varchar(255) NOT NULL default '',
      `on_download` tinyint(4) NOT NULL default '0',
      `statut_envoi` varchar(255) NOT NULL default '',
      `nb_envoi` int(11) NOT NULL default '0',
      `nb_download` int(11) NOT NULL default '0',
      `date_download` datetime NOT NULL default '0000-00-00 00:00:00',
      KEY `commande_id` (`commande_id`),
      KEY `produit_id` (`produit_id`),
      KEY `produit_id_2` (`produit_id`)
    ) TYPE=MyISAM;
    En fait c'est pour avoir "Les internautes ayant acheté cet article ont également acheté les articles suivants :"
    Associer sur la fiche produit 2 autres articles qui ont également été acheté par les clients, la requête au début du topic marche en local mais pas sur le serveur à cause de la version mysql4 qui ne prend pas les requête imbriqué.
    Il faut donc que je la transforme si je veux qu'elle marche sur le serveur.
    Merci à ceux qui pourront m'aider.

Discussions similaires

  1. colonne définie par une requête imbriquée
    Par lper dans le forum Langage SQL
    Réponses: 10
    Dernier message: 02/09/2005, 17h41
  2. une requête imbriquée est-elle autorisée dans un INSERT ???
    Par Ekimasu dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/08/2005, 10h21
  3. Passage de paramètres dans une requête imbriquée
    Par DrakkoFR dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2005, 13h46
  4. [Requête] Faire une requête imbriquée?
    Par sekiryou dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2004, 23h52
  5. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 11h29

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