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
Inform-Net
Inscrit le: 04 Aoû 2007
Messages: 23
Localisation: France - Ardennes
Posté le: Sam 01 Sep 2007, 1:23 pm
Bonjour,
Mets nous ton code complet, on verra mieux
@+
_________________ Patrick Feck
Inform-Net
Redox
Modérateurs
Inscrit le: 07 Sep 2004
Messages: 974
Posté le: Dim 02 Sep 2007, 11:15 am
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
cloetfred
Inscrit le: 30 Mar 2005
Messages: 26
Posté le: Lun 03 Sep 2007, 7:09 am
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 ;
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
Redox
Modérateurs
Inscrit le: 07 Sep 2004
Messages: 974
Posté le: Mar 04 Sep 2007, 7:55 pm
J'ai voulu compliquer un peu la requete
Cela ne nous explique pas ce que tu as voulu faire précisément !
cloetfred
Inscrit le: 30 Mar 2005
Messages: 26
Posté le: Mar 04 Sep 2007, 8:18 pm
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
Redox
Modérateurs
Inscrit le: 07 Sep 2004
Messages: 974
Posté le: Mar 04 Sep 2007, 8:34 pm
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'
cloetfred
Inscrit le: 30 Mar 2005
Messages: 26
Posté le: Mar 04 Sep 2007, 10:11 pm
Merci Redox
Cela ne donne pas d'erreur de synthax mais cela ne donne pas la bonne réponse.
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