comparer des id de deux champs

HD
Mammouth du PHP | 1181 Messages

28 janv. 2007, 22:57

bonsoir
y a t il une solution qui m'épargne 20 000 lignes de code pour :
récupérer les "id" (champs id) de "table1"
les comparer aux "id" (champs id) de "table 2"
me donner les id qui existent dans l'une des tables et non dans l'autre (on peut trouver par exemple id=25 dans table1 et non dans table2 ; ou id=13 dans table2 et non dans table1)
merci !!!
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

29 janv. 2007, 01:13

Avec une jointure "LEFT JOIN", "RIGHT JOIN"

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

HD
Mammouth du PHP | 1181 Messages

30 janv. 2007, 17:13

les jointures vont me donner les id communs, mais moi je veux justement ceux qui existent dans l'une et non dans l'autre :?
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Mammouth du PHP | 592 Messages

30 janv. 2007, 17:16

en gros un genre de requete comme ça.

Select distinct id from table1 where id<>select id2 from table2;????

HD
Mammouth du PHP | 1181 Messages

30 janv. 2007, 18:10

en gros un genre de requete comme ça.

Select distinct id from table1 where id<>select id2 from table2;????
oula non je ne crois pas :?
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

ViPHP
ViPHP | 3607 Messages

30 janv. 2007, 18:38

requête de fred corrigée (pas testée):

Code : Tout sélectionner

SELECT id.table1,id.table2 FROM table1, table2 WHERE id.table1<>id.table2

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

30 janv. 2007, 18:39

Tu peut t'en sortir avec les jointures.

Je m'explique :
Une jointure externe (OUTER JOIN) utilise toutes les données des 2 tables, même s'il n'y a pas de correspondances entre les 2 tables (dans ton cas, si l'id de la table1 n'existe pas dans la table2 ou vice versa).

Le soucis avec cette jointure, c'est qu'elle te remonte aussi les lignes qui ont des correspondances dans l'autre table (table1.id = table2.id)

Pour les supprimer, il suffit de ne sélectionner que les ligne où table1.id ou table2.id est vide, ce qui signifie que pour telle ligne, il n'y a pas correspondance dans l'autre table.

La requête sera donc de cette forme :

Code : Tout sélectionner

SELECT t1.id, t2.id FROM table1 t1 OUTER JOIN table2 t2 ON t1.id = t2.id WHERE t1.id IS NULL OR t2.id IS NULL
J'espère avoir été clair sur mes explications mais si tu veux plus de détails sur les jointures, regarde ce tuto : http://sqlpro.developpez.com/cours/sqlaz/jointures/
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

HD
Mammouth du PHP | 1181 Messages

31 janv. 2007, 22:41

salut
j'ai bien compris ces explications sauf que je met les vrais noms et que j'execute le code :
$verif = "SELECT t1.ART_ID,t2.ART_ID FROM articles t1 OUTER JOIN articles_fr t2 ON t1.ART_ID = t2.ART_ID
WHERE t1.ART_ID IS NULL OR t2.ART_ID IS NULL";
ca me met l'erreur :
SELECT t1.ART_ID,t2.ART_ID FROM articles t1 OUTER JOIN articles_fr t2 ON t1.ART_ID = t2.ART_ID WHERE t1.ART_ID IS NULL OR t2.ART_ID IS NULL Erreur de syntaxe près de 'OUTER JOIN articles_fr t2 ON t1.ART_ID = t2.ART_ID WHERE t1.ART_' à la ligne 1
:?:
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

HD
Mammouth du PHP | 1181 Messages

01 févr. 2007, 11:27

la structure de ma BD :
tables :
  • articles
    articles_fr
et dans chacun on trouve un champs "ART_ID"
merci d'avance
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 févr. 2007, 11:59

En suivant le lien donné par zeus tu devrais rapidement voir ce qu'il manque.
Comment fonctionne "OUTER" ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

HD
Mammouth du PHP | 1181 Messages

01 févr. 2007, 12:08

il manque un "LEFT" avant "OUTER" :?: :oops: :?
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

HD
Mammouth du PHP | 1181 Messages

01 févr. 2007, 18:47

Ca n'affiche pas d'erreur mais ca n'a pas l'air de fonctionner
je ne vois pas autre solution à part LEFT :roll: un coup de pouce serait le bienvenu :wink:
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 févr. 2007, 22:31

"Left" est bien le mot qu'il manquait.... après l'odre des tables est important par rapport au "LEFT" et "RIGHT"

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

HD
Mammouth du PHP | 1181 Messages

01 févr. 2007, 23:27

merci à tous pour votre aide !
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]