:: Easy-Script.com :: Index du Forum

Votre bannière ici !

 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   S'enregistrerS'enregistrer 
 RSS : Les 20 dernières discussions des forums d'Easy-Script.nom RSS   ProfilProfil   Messages PrivésMessages Privés   ConnexionConnexion 

Poster un nouveau sujet  Répondre au sujet
clause not in
cloetfred


Inscrit le: 30 Mar 2005
Messages: 26
Répondre en citant
Bonjour,

J'ai une table membre et une table commande et je voudrais retrouver les membres qui n'ont pas fait de commande; Pour cela je fais la requete suive et MySql me donne une erreure de syntax.

Voici ma requete : Select id_membre from membre where id_membre NOT IN (Select id_membre from commande).

L'erreure est "Something is wrong in your syntax près de 'Select id_membre from commande' à la ligne 1"

Avez vous une idée ?
Merci d'avance

Fred
Voir le profil de l'utilisateurEnvoyer un message privé
Inform-Net


Inscrit le: 04 Aoû 2007
Messages: 23
Localisation: France - Ardennes
Répondre en citant
Bonjour,

Mets nous ton code complet, on verra mieux

@+

_________________
Patrick Feck
Inform-Net
Voir le profil de l'utilisateurEnvoyer un message privéEnvoyer l'e-mailVisiter le site web du posteur
Redox
Modérateurs
Modérateurs

Inscrit le: 07 Sep 2004
Messages: 974
Répondre en citant
Salut,

Donnes nous aussi le schéma de tes tables...



PS: Pour réaliser des sous requêtes, il faut utiliser MySQL 5 (si je ne me trompe pas). Une solution si tu ne l'utilise pas serait de faire une jointure du style :

Code:
SELECT membre.membre_id FROM membre LEFT JOIN commande ON membre.membre_id = commande.membre_id WHERE commande.membre_id IS NULL
Voir le profil de l'utilisateurEnvoyer un message privé
cloetfred


Inscrit le: 30 Mar 2005
Messages: 26
Répondre en citant
Salut,

La solution proposée fonctionne bien avec deux tables. J'ai voulu compliquer un peu la requete et la le left join ne marche plus (ou je ne sais pas le faire ;( ).
Bref j'ai refait une requete qui marche bien en localhost sur mon PC (version 4.1.9 de MySql) et qui donne une erreur sur le serveur (version 3.23.54 de MySQl). Voici le code de la requete :
Code:
SELECT m.id_membre, m.nom, m.prenom FROM membre m WHERE m.id_membre NOT IN (SELECT c.id_membre FROM commande c, detail d where c.id_com = d.id_com and d.id_event='16')

et voici l'erreur :
You have an error in your SQL syntax near 'SELECT c.id_membre FROM commande c, detail d where c.id_com = d.id_c' at line 1

Voici le schema de mes 3 tables
Code:
CREATE TABLE `commande` (
  `id_com` int(10) NOT NULL auto_increment,
  `id_membre` int(20) NOT NULL default '0',
  `date_com` datetime NOT NULL default '0000-00-00 00:00:00',
  `total_com` float(11,2) NOT NULL default '0.00',
  `societe_com` varchar(50) NOT NULL default '',
  `nom_com` varchar(50) NOT NULL default '',
  `prenom_com` varchar(50) NOT NULL default '',
  `adresse_com` tinytext NOT NULL,
  `postal_com` varchar(5) NOT NULL default '',
  `ville_com` varchar(70) NOT NULL default '',
  `pays_com` varchar(30) NOT NULL default '',
  `tel_com` varchar(10) NOT NULL default '',
  `nom_invit_1` varchar(50) NOT NULL default '',
  `prenom_invit_1` varchar(50) NOT NULL default '',
  `societe_invit_1` varchar(50) NOT NULL default '',
  `nom_invit_2` varchar(50) NOT NULL default '',
  `prenom_invit_2` varchar(50) NOT NULL default '',
  `societe_invit_2` varchar(50) NOT NULL default '',
  `nom_invit_3` varchar(50) NOT NULL default '',
  `prenom_invit_3` varchar(50) NOT NULL default '',
  `societe_invit_3` varchar(50) NOT NULL default '',
  `total_paye` float(11,2) NOT NULL default '0.00',
  PRIMARY KEY  (`id_com`),
  KEY `id_cli` (`id_membre`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 PACK_KEYS=0 AUTO_INCREMENT=160 ;
-- --------------------------------------------------------
Code:
CREATE TABLE `detail` (
  `id_det` int(20) NOT NULL auto_increment,
  `id_com` int(10) NOT NULL default '0',
  `id_event` int(5) NOT NULL default '0',
  `quantite` int(3) NOT NULL default '0',
  PRIMARY KEY  (`id_det`),
  KEY `id_com` (`id_com`),
  KEY `id_pro` (`id_event`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=160 ;
-- --------------------------------------------------------
Code:
CREATE TABLE `membre` (
  `id_membre` int(15) NOT NULL auto_increment,
  `id` varchar(20) default NULL,
  `civil` varchar(4) NOT NULL default '',
  `nom` varchar(50) NOT NULL default '',
  `prenom` varchar(50) NOT NULL default '',
  `societe` varchar(50) NOT NULL default '',
  `adresse` varchar(50) NOT NULL default '',
  `postal` varchar(5) NOT NULL default '',
  `ville` varchar(70) NOT NULL default '',
  `pays` varchar(30) NOT NULL default '',
  `tel` varchar(15) NOT NULL default '0',
  `mail` tinytext NOT NULL,
  `login` varchar(20) NOT NULL default '',
  `passe` varchar(20) NOT NULL default '',
  `valide` int(1) default '0',
  `fax` varchar(15) NOT NULL default '',
  `gsm` varchar(15) NOT NULL default '',
  `adresse_priv` varchar(50) NOT NULL default '',
  `postal_priv` varchar(5) NOT NULL default '',
  `ville_priv` varchar(50) NOT NULL default '',
  `pays_priv` varchar(30) NOT NULL default '',
  `radiotypefct` varchar(15) NOT NULL default '',
  `datedebact` date NOT NULL default '0000-00-00',
  `fonctioncourt` varchar(50) NOT NULL default '',
  `NCBFA` varchar(20) NOT NULL default '',
  `titrecourt` varchar(30) NOT NULL default '',
  `fonctioncomp` varchar(50) NOT NULL default '',
  `titrecomp` varchar(30) NOT NULL default '',
  `fonctionautre` varchar(50) NOT NULL default '',
  `titreautre` varchar(30) NOT NULL default '',
  `datenaiss` date NOT NULL default '0000-00-00',
  `etatcivil` varchar(30) NOT NULL default '',
  `etudes` varchar(70) NOT NULL default '',
  `historique1` varchar(70) NOT NULL default '',
  `historique2` varchar(70) NOT NULL default '',
  `association1` varchar(70) NOT NULL default '',
  `association2` varchar(70) NOT NULL default '',
  `hobbies` varchar(70) NOT NULL default '',
  `motif1` varchar(70) NOT NULL default '',
  `motif2` varchar(70) NOT NULL default '',
  `parrain1` varchar(70) NOT NULL default '',
  `parrain2` varchar(70) NOT NULL default '',
  `dateinscr` date NOT NULL default '0000-00-00',
  `photo` tinytext NOT NULL,
  PRIMARY KEY  (`id_membre`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=133 ;

Avez vous une idée ?
Merci

Fred
Voir le profil de l'utilisateurEnvoyer un message privé
Redox
Modérateurs
Modérateurs

Inscrit le: 07 Sep 2004
Messages: 974
Répondre en citant
J'ai voulu compliquer un peu la requete
Cela ne nous explique pas ce que tu as voulu faire précisément !
Voir le profil de l'utilisateurEnvoyer un message privé
cloetfred


Inscrit le: 30 Mar 2005
Messages: 26
Répondre en citant
En fait je cherche à sélectionner les membres non inscrit à un événement. L'id de l'évent se trouvant dans la table event. J'ai réussi à le faire sous MySql 4.1 avec la requete suivante SELECT m.id_membre, m.nom, m.prenom FROM $sql_membre m WHERE m.id_membre NOT IN (SELECT c.id_membre FROM $sql_commande c, $sql_detail d where c.id_com = d.id_com and d.id_event='$id'

Le problème est que le serveur a une version 3.23 de MySql et que ce type de requete ne fonctionne pas. Je dois le faire avec des join et je n'y arrive pas. Si quelqu'un a une piste ???

Merci

Fred
Voir le profil de l'utilisateurEnvoyer un message privé
Redox
Modérateurs
Modérateurs

Inscrit le: 07 Sep 2004
Messages: 974
Répondre en citant
Essaie une requête de ce style là (si j'ai bien compris ce que tu voulais faire)

Code:
SELECT membre.membre_id, membre.nom, membre.prenom FROM membre
LEFT JOIN commande ON membre.membre_id = commande.membre_id
LEFT JOIN detail ON commande.id_com = detail.id_com   
WHERE detail.id_event != '16'
Voir le profil de l'utilisateurEnvoyer un message privé
cloetfred


Inscrit le: 30 Mar 2005
Messages: 26
Répondre en citant
Merci Redox

Cela ne donne pas d'erreur de synthax mais cela ne donne pas la bonne réponse.

Merci

Fred
Voir le profil de l'utilisateurEnvoyer un message privé
Annonces && Topic Scooping
clause not in
Vous pouvez poster de nouveaux sujets dans ce forum
Vous pouvez répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum
Toutes les heures sont au format GMT + 2 Heures  
Page 1 sur 1  

  
  
 Poster un nouveau sujet  Répondre au sujet  


Powered by phpBB © 2001, 2002 phpBB Group
Traduction par : phpBB-fr.com
Design by Vjacheslav Trushkin
phpBB SEO

Anti Bot Question MOD - phpBB MOD against Spam Bots
Inscriptions / messages bloqués: 2699 / 640