Formation Google AnalyticsSavez-vous bien utiliser les outils de mesure d'audience ?
Effectuez-vous un calcul de ROI (Retour sur investissement) pour savoir comment améliorer vos campagnes emarketing ?
Savez-vous utiliser les bons outils pour booster votre taux de transformation ?
La formation Web Analytics de Ranking Metrics, présentée par un expert reconnu officiellement par Google Analytics, vous apportera les réponses à toutes vos questions !
===> Informations et inscriptions.

[R]Un problème basique sur MYSQL, quelqu'un peut-il m'aider.

Poster un nouveau sujet Imprimer cette discussion    Forum -> Développement d'un site Web   Les dernières discussions de ce forum sont disponibles au format RSS
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 
John Smith
WRInaute impliqué
WRInaute impliqué

Inscrit le: 04 Avr 2007
Messages: 266
Localisation: Au sud de Paris

URL permanente de ce messagePosté le : Mer Jan 16, 2008 23:08    Sujet du message: [R]Un problème basique sur MYSQL, quelqu'un peut-il m'aider.

Bonsoir,

Le problème est assez simple :

J'ai deux tables MySQL. Une est remplie d'éléments, l'autre vide.

Quand je sélectionne un élément dans la première table, cet élément est inséré dans la deuxième table (sans pour autant être effacé dans la première).

Le problème se pose car je n'arrive pas à sélectionner dans la première table tous les éléments sauf ceux qui ont été inscrit dans la deuxième table.
J'avais pensé à un truc du genre :

SELECT DISTINCT tab1.id from tab1, tab2 where tab1.id <> tab2.id

Mais ça ne marche pas. Alors quelle requête doit-on écrire pour sélectionner les éléments d'une table qui n'appartiennent pas à une deuxième table.

Merci de m'apporter vos lumières.


Dernière édition par John Smith le Jeu Jan 17, 2008 23:16; édité 1 fois
 
John Smith
druart
WRInaute passionné
WRInaute passionné

Inscrit le: 30 Avr 2006
Messages: 596
Localisation: Lille

URL permanente de ce messagePosté le : Mer Jan 16, 2008 23:11    Sujet du message: [R]Un problème basique sur MYSQL, quelqu'un peut-il m'aider.

Bonsoir,

Je pencherai vers une recherche vers "not in" plutôt que vers "<>" (demande à notre ami Google)


(ma lumière est faible ce soir)
 
druart Visiter le site web du posteur
javases
Nouveau WRInaute

Inscrit le: 15 Jan 2008
Messages: 12

URL permanente de ce messagePosté le : Jeu Jan 17, 2008 0:00    Sujet du message: [R]Un problème basique sur MYSQL, quelqu'un peut-il m'aider.

select id from table1 where id not in (select id from table2)
 
javases
jcaron
WRInaute passionné
WRInaute passionné

Inscrit le: 13 Fév 2004
Messages: 503
Localisation: Paris

URL permanente de ce messagePosté le : Jeu Jan 17, 2008 0:04    Sujet du message: Re: Un problème basique sur MYSQL, quelqu'un peut-il m'aider

John Smith a écrit:
Le problème se pose car je n'arrive pas à sélectionner dans la première table tous les éléments sauf ceux qui ont été inscrit dans la deuxième table.
J'avais pensé à un truc du genre :

SELECT DISTINCT tab1.id from tab1, tab2 where tab1.id <> tab2.id

Mais ça ne marche pas. Alors quelle requête doit-on écrire pour sélectionner les éléments d'une table qui n'appartiennent pas à une deuxième table.


SELECT tab1.id FROM tab1 WHERE NOT EXISTS (SELECT tab2.id FROM tab2 WHERE tab2.id=tab1.id);

SELECT tab1.id FROM tab1 EXCEPT SELECT tab2.id FROM tab2;

Jacques.
 
jcaron Visiter le site web du posteur
John Smith
WRInaute impliqué
WRInaute impliqué

Inscrit le: 04 Avr 2007
Messages: 266
Localisation: Au sud de Paris

URL permanente de ce messagePosté le : Jeu Jan 17, 2008 12:44    Sujet du message: [R]Un problème basique sur MYSQL, quelqu'un peut-il m'aider.

Merci de vos réponses, j'essaierai ce soir et vous direz pour quelle solution j'ai optée.
 
John Smith
John Smith
WRInaute impliqué
WRInaute impliqué

Inscrit le: 04 Avr 2007
Messages: 266
Localisation: Au sud de Paris

URL permanente de ce messagePosté le : Jeu Jan 17, 2008 23:15    Sujet du message: [R]Un problème basique sur MYSQL, quelqu'un peut-il m'aider.

Eh bien, j'ai fait un mix de tout et ce qui marche chez moi c'est :

Code:
SELECT DISTINCT tab1.id FROM tab1 WHERE tab2.id NOT IN(SELECT tab2.id FROM tab2 WHERE tab2.id=tab1.id)


Encore merci de vos précieux conseils.
 
John Smith
jcaron
WRInaute passionné
WRInaute passionné

Inscrit le: 13 Fév 2004
Messages: 503
Localisation: Paris

URL permanente de ce messagePosté le : Jeu Jan 17, 2008 23:40    Sujet du message: [R]Un problème basique sur MYSQL, quelqu'un peut-il m'aider.

John Smith a écrit:
Eh bien, j'ai fait un mix de tout et ce qui marche chez moi c'est :

Code:
SELECT DISTINCT tab1.id FROM tab1 WHERE tab2.id NOT IN(SELECT tab2.id FROM tab2 WHERE tab2.id=tab1.id)



Euuuuh... Je ne crois pas trop, non. Je pense qu'il y a au moins 2 erreurs (de recopie?). A part le WHERE tab2.id NOT IN qui doit évidemment être WHERE tab1.id NOT IN (tab2 n'est pas visible dans la requête principale), la clause WHERE de requête équivaut à:

tab1.id NOT IN (tab1.id)

soit:

tab1.id <> tab1.id

soit:

0

Bref, ça ne renvoie jamais rien.

Donc si ta requête fonctionne, je pense que ce n'est pas celle là Smile

Jacques.
 
jcaron Visiter le site web du posteur
John Smith
WRInaute impliqué
WRInaute impliqué

Inscrit le: 04 Avr 2007
Messages: 266
Localisation: Au sud de Paris

URL permanente de ce messagePosté le : Ven Jan 18, 2008 13:31    Sujet du message: [R]Un problème basique sur MYSQL, quelqu'un peut-il m'aider.

Oui autant pour moi, heureusement qu'il y en a qui suivent ! C'est bien :

Code:
SELECT DISTINCT tab1.id FROM tab1 WHERE tab1.id NOT IN (SELECT tab2.id FROM tab2 WHERE tab2.id=tab1.id)


Les noms de mes tables à l'origine ne sont pas ceux-là et la requête à d'autres conditions aussi, j'ai fait l'erreur en voulant la retranscrire de manière simplifiée. Rolling Eyes
 
John Smith
jcaron
WRInaute passionné
WRInaute passionné

Inscrit le: 13 Fév 2004
Messages: 503
Localisation: Paris

URL permanente de ce messagePosté le : Ven Jan 18, 2008 13:54    Sujet du message: [R]Un problème basique sur MYSQL, quelqu'un peut-il m'aider.

John Smith a écrit:
Oui autant pour moi, heureusement qu'il y en a qui suivent ! C'est bien :

Code:
SELECT DISTINCT tab1.id FROM tab1 WHERE tab1.id NOT IN (SELECT tab2.id FROM tab2 WHERE tab2.id=tab1.id)


Les noms de mes tables à l'origine ne sont pas ceux-là et la requête à d'autres conditions aussi, j'ai fait l'erreur en voulant la retranscrire de manière simplifiée. Rolling Eyes


Ca corrige une des deux erreurs, mais ça ne fait toujours pas ce que tu veux. Comme déjà dit, c'est équivalent à tab1.id NOT IN (tab1.id) donc à tab1.id <> tab1.id donc 0, donc pas de résultats.

Donc au choix:
- tu utilises NOT IN, et tu utilises la liste entière dans tab2: tab1.id NOT IN (SELECT tab2.id FROM tab2) comme indiqué par javases;
- tu utilises NOT EXISTS, et dans ce cas tu qualifies avec la comparaison: NOT EXISTS (SELECT tab2.id FROM tab2 WHERE tab2.id=tab1.id)
- tu utilises EXCEPT

Note que je ne sais pas si les deux derniers existent dans mysql (et/ou dans quelles versions), mais avec postgresql ça marcherait impec. Note qu'à moins que le planner soit super intelligent (et en fonction des tailles respectives de tab1 et tab2 et des index existants), la méthode du NOT EXISTS est probablement la plus efficace.

Jacques.
 
jcaron Visiter le site web du posteur
John Smith
WRInaute impliqué
WRInaute impliqué

Inscrit le: 04 Avr 2007
Messages: 266
Localisation: Au sud de Paris

URL permanente de ce messagePosté le : Ven Jan 18, 2008 19:19    Sujet du message: [R]Un problème basique sur MYSQL, quelqu'un peut-il m'aider.

Ben pourtant ça marche chez moi.

J'ai admettons 100 éléments dans ma tab1, je vois ma tab2 se remplir progressivement et le résultat se décrémenter au fur et à mesure que je rempli tab2.

J'ai peut-être un bug mais pour l'instant, il est pas apparent. Je donne exactement ma requête telle qu'elle existe sur mon site, peut-être que j'ai fait une erreur de trascription :

Code:
SELECT DISTINCT ".TABLE_AUTEUR_OEUVRES.".id FROM ".TABLE_AUTEUR_OEUVRES." WHERE type = 'originale' AND statut = 1 AND isRecueil = 0 AND ".TABLE_AUTEUR_OEUVRES.".id NOT IN (SELECT ".TABLE_AUTEUR_OEUVRES_JOUR.".oeuvre_id FROM ".TABLE_AUTEUR_OEUVRES_JOUR." WHERE ".TABLE_AUTEUR_OEUVRES_JOUR.".oeuvre_id=".TABLE_AUTEUR_OEUVRES.".id)


Cela me permet d'afficher une oeuvre par jour tirée au hasard dans ma base selon certaines conditions... Les TABLE... sont des constantes PHP...
 
John Smith
jcaron
WRInaute passionné
WRInaute passionné

Inscrit le: 13 Fév 2004
Messages: 503
Localisation: Paris

URL permanente de ce messagePosté le : Ven Jan 18, 2008 20:01    Sujet du message: [R]Un problème basique sur MYSQL, quelqu'un peut-il m'aider.

John Smith a écrit:
Ben pourtant ça marche chez moi.


Ah ouaip finalement en réfléchissant un peu (ça m'arrive des fois Razz ) ça marche, le subselect renvoie soit tab1.id s'il est présent dans tab2, soit rien sinon, donc ça donne le résultat escompté au final. Mais ce n'est à mon avis pas la forme la plus lisible qui soit, et probablement pas la plus efficace, mais bon, tant que ça marche Smile

Jacques.
 
jcaron Visiter le site web du posteur
 
Montrer les messages depuis:   
Revenir en haut    Forum -> Développement d'un site Web Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1 - 
Connexion
Nom d'utilisateur:    Mot de passe:      Se connecter automatiquement à chaque visite    

CLIQUEZ ICI pour vous inscrire à WebRankInfo (forum, annuaire, outils...)

Connexion

© 2001-2005 phpBB Group, support français
Personnalisation : WebRankInfo ™


 ODP  Firefox  Alsacreations  annuaire webmaster Yagoort