Requete SQL

Signaler
Messages postés
505
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
20 mars 2012
-
coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
-
Bonjour,
J'ai un probleme d'affichage des resultats d'uen requette SQL,
Voilà le shema de ma base de données :

table1(id, nom, adresse);
table2(id, c1, c2); c1=nom, c2=adresse.

La table table1 contient 9000 enregistrements (dont 1000 validés et 8000 pas encore).
La table table2 contient les 1000 enregistrements validés;( les enregistrements validés qui existent deja dans la table table1).
Je veux faire une requette pour afficher le contenu des 2 tables sans répétition.

mais avec l'affichage des enregistrements de la table table2 avant la table1.
par exemple :
j ai
table1(1,nom1,adr1)(2,nom2,adr2)(3,nom3,adr3)(4,nom4,adr4)(5,nom5,adr5)
table2(2,nom,adr2)(5,nom5,adr5)

on affichage j'aurai :
(2,nom,adr2)
(5,nom5,adr5)
(1,nom1,adr1)
(3,nom3,adr3)
(4,nom4,adr4)

Merci pour vos aides.

N'importe où. 
mais là où il le faut.

35 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
19
Hello,

déjà, pourquoi avoir fait 2 tables, dans ce cas...?

Bref, fais 2 requêtes. Une "normale" sur ta table2
SELECT id, nom, adresse FROM table2

Une moins normale, sur table1
SELECT id, nom, prenom FROM table1
WHERE id NOT IN (SELECT id FROM table2)

par exemple
Messages postés
505
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
20 mars 2012

Merci pour l'aide,

je travail sur un site qui est daja fait par une autre Ste, alors je peux pas modificer une base qui contient 100 tables et plus de 20 000 Enregistrements.

Pour mon probleme, je dois forcementfaire une seule requette (coté php)!.

N'importe où. 
mais là où il le faut.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
19
Ben

SELECT t1.id, t1.nom, t1.adresse, t2.id, t2.nom, t2.adresse
FROM table 1 t1, table2 t2
WHERE t1.id NOT IN (SELECI id FROM t2)
order by t1.id, t2.id
Messages postés
505
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
20 mars 2012

ça donne des resultats terribles !.
exemple :
id    id
1, 7, ----
2, 7, ----
3, 7, ----
4, 7, ----
5, 7, ----
6, 7, ----
8, 7, ----
9, 7, ----
10, 7, ----
11, 7, ----
12, 7

N'importe où. 
mais là où il le faut.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
Salut,

tout dépend des modifications, mais faire un insert ou un update sur 20 000 enregistrements suite à une erreur de conception, j'ai déjà fait....

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
505
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
20 mars 2012

N'importe où. 
mais là où il le faut.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
19
Non ma requête est foireuse de toute manière.

ceci dit...c'est mal foutu comme système.
Je ne pense pas que tu pourras extraire ça en UNE seule requête.
Sauf à faire un traitement en PHP ensuite, derrière.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
Salut,

SELECT DISTINCT id, nom, adresse FROM (
SELECT id, nom, adresse FROM table2
UNION SELECT id, nom, prenom FROM table1)

un truc comme ça...

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
505
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
20 mars 2012

j'ai fait ça :
select id from table1 where id not in( select id from table2)
UNION ALL
select id from table2
order by id
moi je veux dans order by , afficher les resultats de la table2 et puis les resultats de la table1.
Merci.

Coucou747 : merci, j'ai testé ce que tu m'as donné, mais ça donne des erreurs

N'importe où. 
mais là où il le faut.
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Salut,

Comme l'a dit Malalam tu ne peux pas faire ça en une seule requête ;)
Messages postés
505
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
20 mars 2012

Merci a tous
comme vous avez dit, il falait faire 2 requettes, mais j'avais un seul problème c'est que j'affiche le resultat sur plusieurs pages !.
mais maintenant j'ai pas resolu le probleme grace a vos aides .
Merci

N'importe où. 
mais là où il le faut.
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Tu peux stocker le résultat en cache dans un fichier et te servir du fichier ensuite pour l'afficher sur les autres pages ;)
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
Salut,

on n'a pas ta base pour tester, donc les erreurs, normal, ça en sort, mais tu pourrais au moins nous dire lesquelles....

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
Salut,

antho> tu dois pouvoir le faire en une seule, c'est forcément possible...

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
505
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
20 mars 2012

Oui, c'est reglé merci a vos aides,
2 requettes plus un teste à l'affichage des resultats du 2eme requettes,
"on n'affiche le resultat du 2ème requette que si on a plus de resultat du premiere requette".
Merci.

N'importe où. 
mais là où il le faut.
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Coucou > pourquoi ça serait forcément possible ? au contraire là on a bien vu que en tout cas, on a pas trouvé de solution en une seule requête (ce qui ne veut pas dire que ce n'est pas possible, mais honnêtement, je doute que ça le soit).
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
Salut,

Lieber Antho, as tu déjà fait un tour dans un livre de MYSQL ? Selon eux, tout est possible, quand tu sais quels sont les contraites, il te restes à demander à mysql de te découper tes lignes.... Le plus compliqué, c'est de séléctionner trop de lignes, ensuite, pour les choisir, ça va tout seul...

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
19
Tout est possible, à condition de bien structurer ta base de données. On ne peut pas demander à mysqlk de palier aux erreurs de conception. Et là, il y en a une.
Je n'affirme pas que c'est impossible en une seule requête, mais j'émets de sérieux doutes aussi. En tous cas, je n'ai pas trouvé de moyen de le faire.
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Mouais en même temps, si un manuel te dit qu'avec le super parachute machin tu peux te jeter du haut de la tour effeil et ouvrir le parachute 10 mètres avant le sol, crois-le sur parole si tu veux, mais je ne tenterai pas l'expérience ... XD et comme l'a dit Malalam, quand t'as une mauvaise conception, MySQL ne peut y pallier, dans le cas présent, on ne peut pas le faire en une seule requête ;)
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
Salut,

si on m'envoyait le message d'erreur de ma requette ou bien les insert into qui permettent de créer la base, je veux bien tenter de vous prouver le contraire...

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
1 2