Requete SQL

younes371 Messages postés 502 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 20 mars 2012 - 8 janv. 2007 à 11:50
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 19 janv. 2007 à 12:31
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

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
12 janv. 2007 à 18:53
Bon courage :)
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
12 janv. 2007 à 19:50
SELECT *
FROM table1, table2
ORDER BY table2.id, table1.id
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
12 janv. 2007 à 20:48
Faut faire du traitement PHP derrière ... et SELECT *, hum ... :p
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
13 janv. 2007 à 10:19
Salut,

antho, pas du php, mais tu fais un
SELECT * FROM (SELECT *
FROM table1, table2
ORDER BY table2.id, table1.id) AS a WHERE a.propriété est vérifiée;

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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
13 janv. 2007 à 22:28
Quelle propriété...? Par rapport à ce qu'a décrit Younes...?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
13 janv. 2007 à 22:32
et puis select * from (select * from ...
a peu de chance de marcher...?
 tu ne sélectionnes pas des noms de table dans ta sous requête.
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
13 janv. 2007 à 22:34
Malalam > c'est ce que je lui ai dit sur le chat :p
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
14 janv. 2007 à 00:55
Il est têtu des fois, hein ? ;-)
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
14 janv. 2007 à 01:15
Tu me diras moi aussi :p et là honnêtement, si il arrive à faire ça en une seule requête, je l'applaudirais :p Mais franchement, j'ai peu d'espoir ;)
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
18 janv. 2007 à 14:05
Salut,

max@coucu747-acer:~$ mysql --user=root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6 to server version: 5.0.21-Debian_3ubuntu1-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> DROP DATABASE test
    -> ;
Query OK, 2 rows affected (0.08 sec)

mysql> CREATE DATABASE test
    -> ;
Query OK, 1 row affected (0.05 sec)

mysql> USE test
Database changed
mysql> CREATE TABLE table1(id INT UNSIGNED AUTO_INCREMENT, nom VARCHAR(15), adresse VARCHAR(200), PRIMARY KEY(id));
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE table2(id INT UNSIGNED AUTO_INCREMENT, nom VARCHAR(15), adresse VARCHAR(200), PRIMARY KEY(id));
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO table1(nom, adresse) VALUES("nom1", "adresse1"),("nom2", "adresse2"),("nom3", "adresse3"),("nom4", "adresse4"),("nom5", "adresse5");
Query OK, 5 rows affected (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> INSERT INTO table2(id, nom, adresse) VALUES(2, "nom2", "adresse2"), (5, "nom5", "adresse5");
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT id, nom, adresse FROM table2 UNION SELECT id, nom, adresse FROM table1 WHERE id NOT IN (SELECT id FROM table2)
    -> ;
+----+------+----------+
| id | nom  | adresse  |
+----+------+----------+
|  2 | nom2 | adresse2 |
|  5 | nom5 | adresse5 |
|  1 | nom1 | adresse1 |
|  3 | nom3 | adresse3 |
|  4 | nom4 | adresse4 |
+----+------+----------+
5 rows in set (0.01 sec)

mysql>

c'est pas ce qu'on devait obtennir ?

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)
0
younes371 Messages postés 502 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 20 mars 2012
18 janv. 2007 à 15:13
oui on veut obtenir ça,
mais avec ta requette : SELECT id, nom, adresse FROM table2 UNION SELECT id, nom, adresse FROM table1 WHERE id NOT IN (SELECT id FROM table2)
on aura :
+----+------+----------+
| id | nom  | adresse  |
+----+------+----------+
|  1 | nom1 | adresse1 |
|  2 | nom2 | adresse2 |
|  3 | nom3 | adresse3 |
|  4 | nom4 | adresse4 |
|  5 | nom5 | adresse5 |
+----+------+----------+

j' ai testé !, la seule solution c'est faire 2 requette, et affiché l'une après l autre,

SELECT id, nom, adresse FROM table2;
et après:
SELECT id, nom, adresse FROM table1 WHERE id NOT IN (SELECT id FROM table2).

dans l 'affichge c'est pas facile mais j'ai pas ajouté des conditions pour avoir le resultat souhaité !

Meci pour vos aides mes amis.
N'importe où. 
mais là où il le faut.
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
18 janv. 2007 à 15:22
Salut,

... tu dois faire erreur, j'ai pas truqué mon log... et sinon, faut juste modifier l'ordre... je rentres chez moi, corriger ça si tu veux...

si tout les enregistrements de 2 sont dans 1, alors on devrait pouvoir faire une requette un peu plus optimisée aussi...

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)
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
18 janv. 2007 à 16:36
Wai, de visu la requète de Coucou est bonne.

Car j'ai vu de ta part :
select id from table1 where id not in( select id from table2)
UNION ALL
select id from table2
order by id

Ce qui est un peu différent en soi :)
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
18 janv. 2007 à 18:07
Les ID devaient pas être classés dans un certain ordre ? en tout cas bien joué :)
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
19 janv. 2007 à 12:31
Salut,

normalement, si t'as SELECT requette1 UNION SELECT requette2, les résultats de 1 seront avant ceux de 2...

mysql> SELECT VERSION();
+----------------------------+
| VERSION()                  |
+----------------------------+
| 5.0.21-Debian_3ubuntu1-log |
+----------------------------+
1 row in set (0.00 sec)

mysql> USE test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SELECT id, nom, adresse, 2 AS table_name FROM table2 UNION SELECT id, nom, adresse, 1  FROM table1 WHERE id NOT IN (SELECT id FROM table2) ORDER BY table_name DESC, id;
+----+------+----------+------------+
| id | nom  | adresse  | table_name |
+----+------+----------+------------+
|  2 | nom2 | adresse2 |          2 |
|  5 | nom5 | adresse5 |          2 |
|  1 | nom1 | adresse1 |          1 |
|  3 | nom3 | adresse3 |          1 |
|  4 | nom4 | adresse4 |          1 |
+----+------+----------+------------+
5 rows in set (0.00 sec)

mysql>

avec ça, peu importe l'ordre des ids....

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)
0
Rejoignez-nous