Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3381 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MYSQL5] Selection si pas déjà dans une autre table [updated]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MYSQL5] Selection si pas déjà dans une autre table [updated]

n°1350166
KdZ'
Simple®
Posté le 20-04-2006 à 00:59:35  profilanswer
 

:hello:  :hello:  
Salut,
 
Je coince sur un truc surement très con [:mir45] , en fait disons que je veux selectionner tous les magasins, sauf ceux déjà enregistrés dans une table.
 
Exemple :
J'ai une table magasins, et une autre user2magasin, je veux selectionner tous les membres qui ne sont pas dans la table user2magasin.
 
J'ai donc essayer not like et bien d'autres encores mais rien n'y fait, j'arrive a rien  [:wawash]  
 
Uné idée ?
 
Voici mon code actuel (Qui renvoit des doublons en faite :/ )

Code :
  1. SELECT `magasins`.`id_magasin`, `magasins`.`nom`
  2. FROM magasins, users2magasins
  3. WHERE ((`users2magasins`.`id_user` not like '2') AND (`users2magasins`.`id_magasin` not like `magasins`.`id_magasin`))
  4. ORDER BY `magasins`.`nom` ASC


Message édité par KdZ' le 09-05-2006 à 15:19:28
mood
Publicité
Posté le 20-04-2006 à 00:59:35  profilanswer
 

n°1350167
zapan666
Tout est relatif
Posté le 20-04-2006 à 01:10:24  profilanswer
 

Code :
  1. select id_magasin FROM magasins MINUS select id_magasin FROM user2magasin


 
Si tu n'a pas le MINUS, tu peux faire une jointure externe, et récupéré tous les magasins dont la résultat de la jointure est nul (minus mysql dans google doit donner des exemples)


---------------
my flick r - Just Tab it !
n°1350171
KdZ'
Simple®
Posté le 20-04-2006 à 01:20:43  profilanswer
 

Merci, je check de suite :)
Je n'ai en revanche rien touvé sur la doc mysql pour minus :eek:


Message édité par KdZ' le 20-04-2006 à 01:26:19
n°1350172
KdZ'
Simple®
Posté le 20-04-2006 à 01:25:59  profilanswer
 

J'en suis là :

Code :
  1. SELECT `magasins`.`id_magasin`, `magasins`.`nom`
  2. FROM magasins
  3. MINUS (select * from `users2magasins` where `users2magasins`.`id_user`=2 and `users2magasins`.`id_magasin`=`magasins`.`id_magasin`)
  4. ORDER BY `magasins`.`nom` ASC


 
Edit : Et voila :) Merci pour tous ;)
 

Code :
  1. SELECT `magasins`.`id_magasin`, `magasins`.`nom`
  2. FROM `magasins`
  3. WHERE NOT EXISTS ( select `id_user2magasin` from `users2magasins` where `users2magasins`.`id_user`=2 and `users2magasins`.`id_magasin`=`magasins`.`id_magasin`)
  4. ORDER BY `magasins`.`nom` ASC


    [:must]  
 
ps : Ceci dit, je n'ai pas réussi à faire fonctionner le MINUS :/


Message édité par KdZ' le 20-04-2006 à 01:44:01
n°1350602
zapan666
Tout est relatif
Posté le 20-04-2006 à 16:41:47  profilanswer
 

bah, apparament, il n'y a pas encore MINUS sur Mysql (sur d'autre SGBD je crois que si)
http://mysql.developpez.com/faq/?p [...] ITE_except
http://forums.mysql.com/read.php?61,22323,22323


---------------
my flick r - Just Tab it !
n°1350625
moi23372
Posté le 20-04-2006 à 16:52:48  profilanswer
 

MINUS existe sur Oracle mais pas sur MySQL. Mais un NOT EXISTS peut le remplacer tout aussi facilement

n°1350632
KdZ'
Simple®
Posté le 20-04-2006 à 16:56:48  profilanswer
 

Apparemment Oui (et je répond à vous deux) :)

n°1362463
KdZ'
Simple®
Posté le 09-05-2006 à 15:19:11  profilanswer
 

Ah les boules, ma requete ne fonctionne pas sous mysql4.0 :(
 
Pourtant NOT EXISTS est bien présent dans la doc de cette version, une idée ?
 
Erreur de syntaxe près de 'EXISTS ( select `id_user2magasin` from `users2magasins` where `u' à la ligne 1


Message édité par KdZ' le 09-05-2006 à 15:21:11
n°1362503
jeoff
Posté le 09-05-2006 à 15:55:14  profilanswer
 

ta sous requête renvoie plus d'une valeur ?

n°1362676
KdZ'
Simple®
Posté le 09-05-2006 à 18:05:58  profilanswer
 

Comment ça ?

mood
Publicité
Posté le 09-05-2006 à 18:05:58  profilanswer
 

n°1362893
mrbebert
Posté le 09-05-2006 à 23:11:10  profilanswer
 

Tu veux renvoyer les magasins dont l'id est dans la table "magasins" mais pas dans la table "users2magasins :??:
 

Code :
  1. SELECT magasins.*
  2. FROM magasins
  3. WHERE id NOT IN (
  4.     SELECT id_magasin FROM users2magasins
  5. )

[:proy]

n°1362924
KdZ'
Simple®
Posté le 10-05-2006 à 00:58:56  profilanswer
 

Ah pas mal, j'ai donc fait :
 

Code :
  1. SELECT magasins.*
  2. FROM magasins
  3. WHERE id_magasin NOT IN (
  4.     SELECT id_magasin FROM users2magasins
  5. )


 
Mais sous MySQL 4.0.20-standard j'ai #1064 - Erreur de syntaxe près de 'SELECT id_magasin FROM users2magasins  )
LIMIT 0, 30' à la ligne 1

 
C'est fou ça, pourtant ça devrait fonctionner à en croire la doc  :??:  :pfff:
 
Edit :Alors qu'en local (win5.1,php5.1,mysql5.0,apache2) ça fonctionne :(

Message cité 1 fois
Message édité par KdZ' le 10-05-2006 à 01:04:31
n°1363185
KdZ'
Simple®
Posté le 10-05-2006 à 12:47:20  profilanswer
 

up please

n°1363207
jeoff
Posté le 10-05-2006 à 13:15:43  profilanswer
 

essaye ça
http://dev.mysql.com/doc/refman/5. [...] eries.html
 
En plus, EXISTS est plus perfs que IN si je ne m'abuse. :)

n°1363254
moonboot
Posté le 10-05-2006 à 13:49:05  profilanswer
 

ca dépend des cas et des volumétries de table, tu peux avoir un EXIST meilleur qu'un IN dans un cas particulier et le contraire dans un autre.
 
le meilleur moyen de savoir : tester ;)

n°1363299
KdZ'
Simple®
Posté le 10-05-2006 à 14:11:16  profilanswer
 

Déjà essayé (vous lisez pas ou quoi) mais marche pas.

n°1363331
KdZ'
Simple®
Posté le 10-05-2006 à 14:26:25  profilanswer
 

bon, j'ai essayer de faire comme dans la doc, mais rien n'y fait.
 
SELECT DISTINCT magasins.id_magasin FROM magasins
  WHERE NOT in (SELECT * FROM magasins  
                    WHERE magasins.id_magasin = users2magasins.id_magasin);
 
C'est possible que ça vienne de la config de mysql ?

n°1363618
mrbebert
Posté le 10-05-2006 à 17:17:18  profilanswer
 

Ca, c'est normal, la requête est pas bonne. Il faut lui dire ce qu'il doit rechercher dans la sous-requête [:proy]

n°1363637
jeoff
Posté le 10-05-2006 à 17:33:03  profilanswer
 

KdZ' a écrit :

Ah pas mal, j'ai donc fait :
 

Code :
  1. SELECT magasins.*
  2. FROM magasins
  3. WHERE id_magasin NOT IN (
  4.     SELECT id_magasin FROM users2magasins
  5. )


 
Mais sous MySQL 4.0.20-standard j'ai #1064 - Erreur de syntaxe près de 'SELECT id_magasin FROM users2magasins  )
LIMIT 0, 30' à la ligne 1

 
C'est fou ça, pourtant ça devrait fonctionner à en croire la doc  :??:  :pfff:
 
Edit :Alors qu'en local (win5.1,php5.1,mysql5.0,apache2) ça fonctionne :(


 
Alors si j'ai bien compris, tu as une BDD locale mysql 5. Tout fonctionne.
Tu as une BDD distante mysql 4. Ca ne marche pas.
 
Utilise-tu bien les même requêtes pour tes deux tests car quand je vois ça j'ai un gros doute :
 

Citation :

Mais sous MySQL 4.0.20-standard j'ai #1064 - Erreur de syntaxe près de 'SELECT id_magasin FROM users2magasins  )
LIMIT 0, 30' à la ligne 1


 
et deux posts plus bas haut
 

Citation :

Erreur de syntaxe près de 'EXISTS ( select `id_user2magasin` from `users2magasins` where `u' à la ligne 1


 
Tu n'aurais pas un problème de nommage de tes champs par hasard ?
Tes BDD sont identiques ?
Tu les a repliqué à la main ?


Message édité par jeoff le 10-05-2006 à 17:36:10
n°1363661
KdZ'
Simple®
Posté le 10-05-2006 à 18:01:17  profilanswer
 

J'ai fait un export compatible mysql4.0 phpmyadmin.
Tout c'est bien passé et les relations sont bien là.
 
Je refait un test avec la même requete pour les deux bases de suite...
mais je suis sur de l'avoir déjà fait, je n'y comprend rien.
 
Bon a tout de suite
 
Edit : Bon voila, j'ai bien vérifié, toutes les tables sont là, les données aussi.
Et avec la même requete qui fonctionne en local mysql5.0 :

Code :
  1. SELECT `magasins`.`id_magasin` , `magasins`.`nom`
  2. FROM `magasins`
  3. WHERE NOT
  4. EXISTS (
  5. SELECT `id_user2magasin`
  6. FROM `users2magasins`
  7. WHERE `users2magasins`.`id_user` =1
  8. AND `users2magasins`.`id_magasin` = `magasins`.`id_magasin`
  9. )
  10. ORDER BY `magasins`.`nom` ASC


 
rien n'y fait pour mysql4.0 :(
#1064 - Erreur de syntaxe près de 'EXISTS ( select `id_user2magasin` from `users2magasins` where `u' à la ligne 1


Message édité par KdZ' le 10-05-2006 à 18:08:40
n°1363720
KdZ'
Simple®
Posté le 10-05-2006 à 18:57:22  profilanswer
 

Tiens, je viens de m'apercevoir que l'export/import a oublié les auto increment :/
 
Tout est ok et identique mais idem :(

n°1363726
jeoff
Posté le 10-05-2006 à 19:00:02  profilanswer
 

la sous requête à part fonctionne ?
mysql 4.0 supporte les sous requêtes ?

n°1363856
KdZ'
Simple®
Posté le 10-05-2006 à 22:32:31  profilanswer
 

Oui mais en rajoutant from magasins bien sur


Message édité par KdZ' le 10-05-2006 à 22:36:01
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MYSQL5] Selection si pas déjà dans une autre table [updated]

 

Sujets relatifs
semantique pour la balise <table>[PHP] Tester la présence d'une table dans une BDD
pb table de hachageparcourir ligne par ligne une selection
Table problème[Résolu] Relation entre table sans intégrité référentielle
Problème de sélection de feuille excelPDO : lire et afficher une table
selection texte bizarre[VBA][Access] Faire une requête jointure sur un recordset et une table
Plus de sujets relatifs à : [MYSQL5] Selection si pas déjà dans une autre table [updated]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR