requete SQL successives

29 réponses
AuteurMessage

vivaslovenia |
Membre

 

Inscrit le : 09/05/2005

# Le 09/12/2005 à 15:28

Salut,
je voudrais faire pls requetes SELECT successives sur pls tables, le tout dans un seul tableau.

j'ai essayé de concaténer deux tableaux, mais ça marche pas (ou alors faut passer par une fonction perso)

j'ai ensuite mis les 2 requetes avec ; entre les 2, ça marche pas non plus

j'ai fais ça ensuite:
"SELECT * FROM tab1,tab2 WHERE tab1.nom='toto' OR tab2.title='toto'"
mais ça pédale sans rien donner...

Vous auriez un truc pour faire ça ?

Adijo
Pat

http://www.e-slovenie.comOuvrir dans une nouvelle fenetre

Julgates | Julien
Administrateur

Photo de Julgates

Inscrit le : 09/03/2005

# Le 09/12/2005 à 15:34

J'ai rien compris

Shopping Time NetworkOuvrir dans une nouvelle fenetre - Founder / CTO

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 09/12/2005 à 15:55

Si j'ai bien compris, tu veux faire 2 SELECT différent, mais en un seul appel à mysql_query(), c'est ça ?

Donc, si les données sont du même type (même champs), que ton MySQL le supporte :

select champ1, champ2
from tableA
UNION ALL
select champ1, champ2
from tableB


La même en chose, "dédoublonnant" :
select champ1, champ2
from tableA
UNION
select champ1, champ2
from tableB


Sinon, bah tu fais 2 appels à mysql_query()...

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

erwinol | Erwin
Membre

Photo de erwinol

Inscrit le : 09/05/2005

# Le 09/12/2005 à 15:57

Rien compris non plus ...

vivaslovenia | Patrick
Membre

 

Inscrit le : 09/05/2005

# Le 09/12/2005 à 16:20

un exemple sera + clair:

j'ai 2 requetes

SELECT id,titre FROM tab1 WHERE titre='toto'
SELECT id,title FROM tab2 WHERE title='toto'

et ça doit m'afficher les résultats de la 1ere puis de la 2eme...
il peut y avoir n requetes...et ça doit être transparent pour l'utilisateur (un client qui connait pas grand chose à SQL..)

bon je pense que je vais tout parcourir et mettre ça ds un big tableau...et le client n'aura plus qu'a parcourir le tableau

Adijo
Pat
PS: les bannières rallentissent vachement le forum chez moi
PS2: les membres connaissent tous Trade je pense non ?






(Message édité le 09-12-2005 à 16h26 par vivaslovenia)

http://www.e-slovenie.comOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 09/12/2005 à 16:26

et mes réponses, elles sont transparentes aussi ?

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

flush | Jean-Philippe
Modérateur

Photo de flush

Inscrit le : 09/05/2005

# Le 09/12/2005 à 16:40

SELECT id,titre FROM tab1 WHERE titre='toto'
UNION
SELECT id,title FROM tab2 WHERE title='toto'

il faut juste que té les memes champs ;)

@+ Jean-Philippe

radins | Tobias
Modérateur

Photo de radins

Inscrit le : 09/05/2005

# Le 09/12/2005 à 16:43

Clair bool a donné la bonne solution à mon avis.. sinon ça peut se faire aussi avec un join je pense

vivaslovenia | Patrick
Membre

 

Inscrit le : 09/05/2005

# Le 09/12/2005 à 16:43

un "truc" comme ça:
select id,titre
from tableA
UNION
select id,title
from tableB
where tableA.titre='toto' OR tableB.title='toto'

ça peut marcher ?

http://www.e-slovenie.comOuvrir dans une nouvelle fenetre

vivaslovenia | Patrick
Membre

 

Inscrit le : 09/05/2005

# Le 09/12/2005 à 16:46

ah OK, je vais essayer..
merci

http://www.e-slovenie.comOuvrir dans une nouvelle fenetre

flush | Jean-Philippe
Modérateur

Photo de flush

Inscrit le : 09/05/2005

# Le 09/12/2005 à 16:48

Bonne question, j'ai jamais essayer !
Enfin si tu fais quelque chose comme cela c'est sans doute que tes tables sont liés non ?

Donc le mieux serait ptet de faire une jointure ?
Ptet un left join (sous mysql uniquement) ...

@+ Jean-Philippe

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 09/12/2005 à 16:52

NON.

1) l'instruction UNION (avec ou sans le ALL) sert à faire un UNION de 2 SELECT [u]complets. Donc va pas mélanger les clauses WHERE. Le seul truc qui est commun à tous les SELECT, c'est le ORDER BY.

2) le UNION revient à faire un UNION ALL + DISTINCT. Hors, le DISTINCT est une opération très couteuse, donc à ne faire que lorsque c'est necessaire.

select id,titre
from tableA
where tableA.titre='toto'

UNION ALL

select id,title
from tableB
where tableB.title='toto'


Puis éventuellement :
order by titre

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 09/12/2005 à 16:55

Bool pourra surement répondre, encore faudrait-il qu'il repasse un peu sur le forum, ca fait un moment que je le vois plus.

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 09/12/2005 à 16:57

Note : si on fait une jointure, les données se retrouves "juxtaposées" mais pas "les unes après les autres".
Et si c'est mal fait, tu peux te retrouver avec un joli produit cartésien et quelques millions de lignes à récupèrer...


En tous cas, faire un UNION entre deux tables différentes, ça démontre souvent un problème de modèle de données : si les ID n'ont rien à voir entre eux, le fait de les mélanger rend le résultat inexploitable... et s'ils sont liés, alors pourquoi diable ces données ont été mises dans 2 tables différentes ?

Bien sûr il y a des exceptions... mais bon... faut pas abuser de l'union quoi...

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 09/12/2005 à 16:58

Ranoooooooo tsss ;)

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Julgates | Julien
Administrateur

Photo de Julgates

Inscrit le : 09/03/2005

# Le 09/12/2005 à 16:58

Oui à mon avis tu peux faire comme dis flush

Shopping Time NetworkOuvrir dans une nouvelle fenetre - Founder / CTO

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 09/12/2005 à 16:59

T'as mis les cartons en place Julien ? Bool s'en est pris ou c'est pas encore en place ?

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 09/12/2005 à 17:00

... la prochaine fois je me jette du haut de la tour tiens ! (en essayant de ne pas m'empaler sur les grilles de protection)

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Julgates | Julien
Administrateur

Photo de Julgates

Inscrit le : 09/03/2005

# Le 09/12/2005 à 17:04

Rano a dit :
T'as mis les cartons en place Julien ? Bool s'en est pris ou c'est pas encore en place ?

Non non, j'espère qu'il a pas supprimé son compte, quelqu'un a vu Bool dernièrement ici ?

Shopping Time NetworkOuvrir dans une nouvelle fenetre - Founder / CTO

MathieuC | Mathieu
Modérateur

Photo de MathieuC

Inscrit le : 15/07/2005

# Le 09/12/2005 à 17:04

Oui, en general bool aide sur le SQL, mais moi pareil, ca fait longtemps que j'ai pas vu de post de lui

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.

© MHN - Tous droits réservés | CNIL N°844440 | 24/11/2024 1:26:45 | Généré en 8.35ms | Contacts | Mentions légales |