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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  SQL : utilisation de sous requêtes ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

SQL : utilisation de sous requêtes ?

n°147177
Thocan
La loi du silence
Posté le 29-05-2002 à 17:15:37  profilanswer
 

Tiens... y'a pas de catégorie SQL... ;)
 
J'ai donc un ch'tit souci...
j'ai une table comportant deux champs (Pays01, Pays02).
J'aimerai pouvoir afficher en php le résultat de la requête suivante :
lister l'ensemble des pays présents dans les deux champs, avec leur nombre d'apparition, et liste par ordre décroissant de ce nombre d'apparition.
 
Du style :
 
France    | 12
Allemagne | 5
Belgique  | 3
Suède     | 1
 
Mais voilà, je n'y arrive pas...
 
Vous avez des idées?
 
Merci.

 

[jfdsdjhfuetppo]--Message édité par Thocan le 29-05-2002 à 20:06:53--[/jfdsdjhfuetppo]

mood
Publicité
Posté le 29-05-2002 à 17:15:37  profilanswer
 

n°147180
Sh@rdar
Ex-PhPéteur
Posté le 29-05-2002 à 17:17:50  profilanswer
 

y a une catégorie SGBD...
 
SELECT DISTINCT Pays01,COUNT(*) AS total FROM tatable WHERE Pays01=Pays02 ORDER BY total DESC
 
essayes ça pour voir.
 
 
EDIT : j'avais oublié le tri..

 

[jfdsdjhfuetppo]--Message édité par Sh@rdar le 29-05-2002 à 17:18:35--[/jfdsdjhfuetppo]


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°147329
Thocan
La loi du silence
Posté le 29-05-2002 à 20:06:40  profilanswer
 

Merci je vais voir ça...  :)
 
PS : c bon, je l'ai déplacé vers SGBD... J'avais pas vu

 

[jfdsdjhfuetppo]--Message édité par Thocan le 29-05-2002 à 20:07:21--[/jfdsdjhfuetppo]

n°147331
Thocan
La loi du silence
Posté le 29-05-2002 à 20:11:14  profilanswer
 

Nope, je viens de l'essayer sous access , ça ne fonctionne pas...

n°147333
Sh@rdar
Ex-PhPéteur
Posté le 29-05-2002 à 20:15:11  profilanswer
 

arf...  
 
essayes  
 
SELECT Pays01,COUNT(*) AS total FROM tatable WHERE Pays01=Pays02 ORDER BY total DESC GROUP BY Pays01


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°147384
Thocan
La loi du silence
Posté le 29-05-2002 à 21:48:10  profilanswer
 

Hmm... non plus.
Mais pourquoi fais-tu Pays01 = Pays02...?
 
Ce que je me demandais aussi, c'est puisque j'utilise cette requête en php, n'y-a-t-il pas moyen de faire deux requêtes et de rassembler le résultat de ces deux requêtes au sein d'un même tableau, puis de les réordonner en ordre décroissant...?

n°147424
Sh@rdar
Ex-PhPéteur
Posté le 29-05-2002 à 23:00:58  profilanswer
 

Thocan a écrit a écrit :

Hmm... non plus.
Mais pourquoi fais-tu Pays01 = Pays02...?
 
Ce que je me demandais aussi, c'est puisque j'utilise cette requête en php, n'y-a-t-il pas moyen de faire deux requêtes et de rassembler le résultat de ces deux requêtes au sein d'un même tableau, puis de les réordonner en ordre décroissant...?  




 
merde...
 
en relisant ton post je vienx de comprendre mon erreur..
 
tu cherche les différentes valeur de Pays1 ou Pays2  
 
moi j'avais compris que tu cherchais le nombre de ligne ou le pays etait dans les 2 champs (ie identique quoi..)
 
c'est pour ça que je pigeais pas pourquoi tu parlais de requête imbriquées... sorry je décroche à cette heure ci...


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°147516
Thocan
La loi du silence
Posté le 30-05-2002 à 09:15:07  profilanswer
 

Lol...
 
Je te remercie quand même...  :)

n°147551
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 30-05-2002 à 10:13:47  profilanswer
 

A mon tour  :D  
 
SELECT Pays1, COUNT(*) As Total FROM tatable GROUP BY Pays1 UNION (SELECT Pays2, COUNT(*) As Total FROM tatable GROUP BY Pays2) ORDER BY Total DESC
 
Ca me fait peur, mais bon, ça peut marcher après tout... :ange:


---------------
J'ai un string dans l'array (Paris Hilton)
n°147563
Slash-
Posté le 30-05-2002 à 10:18:52  profilanswer
 

Salut,
 
1) tu crees un table temporaire, disons temp, avec une seule colonne, disons col, et qui est du meme type que 1 des deux colonnes de ta table de base
 
2) apres tu t'arranges pour inserer dans cette table temp, les valeurs de la premiere colonne de la table de base qui apparaissent dans la deuxieme colonne avec la requete suivante :  
 
select pays01 from table_de_base where pays01 in (select pays02 from table_de_base);
 
3) tu fais pareil qu'au point 2 sauf que c'est pour l'autre colonne, donc la requete devient :  
 
select pays02 from table_de_base where pays02 in (select pays01 from table_de_base);
 
4) tu fais un simple select ici : select distinct(col),count(*) as total from table_temp group by col order by total desc;
 
5) tu affiches ton resultat
 
6) tu effaces la table temporaire pour faire plus propre :  
drop table temp;
 
voila
 
a+

 

[jfdsdjhfuetppo]--Message édité par Slash- le 30-05-2002 à 10:20:04--[/jfdsdjhfuetppo]

mood
Publicité
Posté le 30-05-2002 à 10:18:52  profilanswer
 

n°147572
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 30-05-2002 à 10:26:40  profilanswer
 

Slash- a écrit a écrit :

Salut,
 
1) tu crees un table temporaire, disons temp, avec une seule colonne, disons col, et qui est du meme type que 1 des deux colonnes de ta table de base
 
2) apres tu t'arranges pour inserer dans cette table temp, les valeurs de la premiere colonne de la table de base qui apparaissent dans la deuxieme colonne avec la requete suivante :  
 
select pays01 from table_de_base where pays01 in (select pays02 from table_de_base);
 
3) tu fais pareil qu'au point 2 sauf que c'est pour l'autre colonne, donc la requete devient :  
 
select pays02 from table_de_base where pays02 in (select pays01 from table_de_base);
 
4) tu fais un simple select ici : select distinct(col),count(*) as total from table_temp group by col order by total desc;
 
5) tu affiches ton resultat
 
6) tu effaces la table temporaire pour faire plus propre :  
drop table temp;
 
voila
 
a+  
 
 




 
dans la mesure ou les 2 tables ont le même nombre de champs, pourquoi faire une table temporaire ? une UNION est toute indiquée, même si je suis pas sur que la mienne fonctionne correctement  ;)


---------------
J'ai un string dans l'array (Paris Hilton)
n°147612
Thocan
La loi du silence
Posté le 30-05-2002 à 10:58:27  profilanswer
 

Harkonnen a écrit a écrit :

A mon tour  :D  
 
SELECT Pays1, COUNT(*) As Total FROM tatable GROUP BY Pays1 UNION (SELECT Pays2, COUNT(*) As Total FROM tatable GROUP BY Pays2) ORDER BY Total DESC
 
Ca me fait peur, mais bon, ça peut marcher après tout... :ange:  




 
Trop bon... Yes ! Ca a l'air de fonctionner...  :bounce:  
J'avais fait le coup de l'union mais je ne pensais pas qu'on puisse si facilement mettre un order by derrière...
Grand merci, donc.
 
PS : sinon, pour slash, oui effectivement la table temp était une solution... mais j'espérais effectivement qu'il y ait une solution plus directe...  :sol:  
Merci

n°147614
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 30-05-2002 à 11:01:21  profilanswer
 

Thocan a écrit a écrit :

 
Trop bon... Yes ! Ca a l'air de fonctionner...  :bounce:  
J'avais fait le coup de l'union mais je ne pensais pas qu'on puisse si facilement mettre un order by derrière...
Grand merci, donc.



Putain, du 1er coup et sans test, y'a vraiment des jours ou je m'étonne moi même  :ouch:  
A+  :hello:


---------------
J'ai un string dans l'array (Paris Hilton)
n°147711
Thocan
La loi du silence
Posté le 30-05-2002 à 12:23:36  profilanswer
 

Bon... histoire de te soulager un peu :
1) j'ai rajouté des () dans la première partie de l'union sinon ça ne fonctionnait pas..
2) ça fonctionne sous Access2000 mais apparemment pas pour la base mysql...
 
Chier. :cry:
 
PS : c'est le "UNION" que mysql n'aime pas?

 

[jfdsdjhfuetppo]--Message édité par Thocan le 30-05-2002 à 12:25:40--[/jfdsdjhfuetppo]

n°147740
Thocan
La loi du silence
Posté le 30-05-2002 à 12:57:56  profilanswer
 

Vi, ça doit effectivement être le coup de l'UNION...
Bref, je suis passé par un array() et ça fonctionne bien, donc je vais m'en contenter...
Ca ralonge le code, c tout...
 
Merci

n°147808
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 30-05-2002 à 14:13:54  profilanswer
 

Effectivement, il me semble que MySQL ne gère pas les sous requetes.
Il serait peut etre temps qu'il soit mis à jour, entre ça et les clés étrangères, ça commence à faire...


---------------
J'ai un string dans l'array (Paris Hilton)

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

  SQL : utilisation de sous requêtes ?

 

Sujets relatifs
un serveur SQL gratuit pour Windows ?[mySql] protection des requetes
Utilisation des frames dans une page ..[SQL in VBA] Requête foireuse
[SQL] Problème de requête !! Help !Pb d edition en vb (Utilisation de rich text box)
concatenation dans du SQLLe boulet du PL/SQL est de retour !!! Sauvez-moi les Jedi de Oracle !!
[SQL SERVER] Compatibilité Win2k[SQL] pb de creation de tables ( oui, je débute ! )
Plus de sujets relatifs à : SQL : utilisation de sous requêtes ?


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