Transformer une requête imbriquée

cans
Invité n'ayant pas de compte PHPfrance

30 juin 2007, 21:03

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 : Tout sélectionner

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

ViPHP
ViPHP | 5924 Messages

30 juin 2007, 21:08

DISTINCT est supproté par à peu près toutes les versions de MySQL, ce sont les sous requètes qui ne sont supportées que par les versions récentes. Tu as quelle version sur ton hébergement web ?

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

30 juin 2007, 21:59

Rappel pratique - n'oubliez pas de :
  • suivre ces quelques conseils de débogage
  • préciser quel SGBD vous utilisez ainsi que sa version
  • poster le schéma des tables pertinentes à votre requête sous la forme d'une instruction "CREATE TABLE" (vous pouvez retirer les colonnes qui ne sont pas utilisées dans les requêtes problématiques)
  • si nécessaire, poster un échantillon des données

cans
Invité n'ayant pas de compte PHPfrance

01 juil. 2007, 10:21

DISTINCT est supproté par à peu près toutes les versions de MySQL, ce sont les sous requètes qui ne sont supportées que par les versions récentes. Tu as quelle version sur ton hébergement web ?
J'ai la version MySQL4 celle qui ne supporte pas les requêtes imbriquées

ViPHP
ViPHP | 5924 Messages

01 juil. 2007, 14:36

Donne nous alors les shémas de tes tables...

cans
Invité n'ayant pas de compte PHPfrance

01 juil. 2007, 16:55

Je vous donne le schéma des tables :
Table "peel_produits"

Code : Tout sélectionner

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 : Tout sélectionner

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;
Merci pour votre aide.