Trier 3 tables MySQL

Fermé
CicinhoRaul Messages postés 221 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 16 janvier 2009 - 14 janv. 2009 à 12:34
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 - 14 janv. 2009 à 17:05
Bonjour, j'ai un petit problème en MySQL :

J'ai 3 tables dont 2 reliés à la troisieme table par un 'id_entreprise'

Je voudrais tout afficher ( les 2 tables reliés en fait) par tri en fonction du nom de l'entreprise : nom_soc

Table 1 : Sports : id_sport,id_entreprise,nom, prenom,etc..
Table 2 Cinema : id_cinema,id_entreprise,nom,prenom,etc..
Table 3 : Societe : id_entreprise,nom_societe.

J'ai fait un $sql = "SELECT * FROM ( SELECT * FROM societe,cinema,sport WHERE
( (societe.id_entreprise = cinema.id_entreprise) AND
(societe.id_entreprise = sport.id_entreprise))
ORDER BY societe.nom_societe );

Helas cette commande ne semble pas marcher

Merci d'avance pour votre aide
A voir également:

10 réponses

Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329
14 janv. 2009 à 13:07
Bonjour,
Que te retourne la requête suivante ?
select * from sports sp, cinema c, societe so 
where sp.id_entreprise = so.id_entreprise 
and so.id_entreprise = c.id_entreprise 
group by so.id_entreprise 
order by so.nom_societe


Cordialement,
0
mikebzh Messages postés 127 Date d'inscription samedi 20 décembre 2008 Statut Membre Dernière intervention 11 mars 2009 28
14 janv. 2009 à 13:07
Salut
Regarde ta requête, elle est bizarre

[req]
SELECT * FROM (SELECT * FROM xxxx WHERE yyyy ORDER BY zzzzz);
[\req]

Pourquoi ton premier SELECT ?
0
CicinhoRaul Messages postés 221 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 16 janvier 2009 7
14 janv. 2009 à 14:53
SLt , merci de vos reponses, oui mikebzh je me suis trompé en faisant un double select, inutile !

Ensuite, Marco, j'ai essayé ta commande, elle n'affiche qu'une seule ligne
J'ai pourtant au moins 1 element dans chacune des tables sport et cinema :S


Mais je vais continuer à creuser ;)
Merci de vos aides
0
CicinhoRaul Messages postés 221 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 16 janvier 2009 7
14 janv. 2009 à 15:33
Helas ca ne fonctionne pas :S:S J'ai verifier en enlevant soit la table CINEMA soit la table SPORT c'est OK mais en mettant les deux, plus rien n'apparait.
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329
14 janv. 2009 à 15:45
C'est parce que tes deux tables sports et cinéma ne sont pas toujours reliés reliés à une société (ou alors un sport est lié à une société, un cinéma à une société, mais les deux ne sont pas liés à une même société).

Peux-tu traduire en français, explicitement, ce que tu souhaites faire de manière fonctionnelle stp ? Décrire un peu ta problématique, sans parler d'informatique.

Merci,
0

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

Posez votre question
CicinhoRaul Messages postés 221 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 16 janvier 2009 7
14 janv. 2009 à 15:52
Slt Marco,

Le but c'est d'afficher tous les contacts triés par société.

Exemple de contacts :

Sport : Toto,Yahoo,Football
Cinema : Titi,Pathé,Titanic un autre contact Cinema : Tutu,Yahoo,Rrrrr

En faisant le select par tri de l'entreprise :

Pathé Titi Titanic
Yahoo Toto Foot
Yahoo Tutu Rrrr

Si Tutu n'apparaissait pas alors on aurait comme tri :
Pathé Titi Titanic
Yahoo Toto Foot

Evidemment il y a les ID qui sont reliés comme j'ai dit au-dessus.
Voila jespere que j'ai été clair :S, MERCI de TON AIDE.
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329
14 janv. 2009 à 16:06
Oui, mais ici tes tables cinema et sport n'ont aucune liaison entre elles, il faut que tu fasses deux requêtes différentes.

Cordialement,
0
CicinhoRaul Messages postés 221 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 16 janvier 2009 7
14 janv. 2009 à 16:06
En mettant un OR à la place du AND dans ta commande MySQL, j'obtiens les deux entreprises mais les nom prenom et le reste sont identiques :(:(
0
CicinhoRaul Messages postés 221 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 16 janvier 2009 7
14 janv. 2009 à 16:16
Mais en mettant deux requetes différentes, je n'obtiendrai un tri par table Cinema puis Sport ou inversement mais pas par entreprise.

Je sais si je suis comprehensible :S

Merci en tous cas de ta disponibilité
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329
14 janv. 2009 à 16:36
Si, tu pourras trier par entreprise.
C'est juste que comme tu devras assembler tes deux résultats, qui seront chacun trié par entreprise, une simple concaténation ne suffira pas pour trier l'ensemble.

Il faut bien rester conscient que le SQL est un langage de requête, ce n'est pas conçu pour faire de l'affichage. Tous les langages implémentent des méthodes de tri pour justement subvenir à ce genre de besoin.
0
CicinhoRaul Messages postés 221 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 16 janvier 2009 7
14 janv. 2009 à 16:45
Ok Marco mais je ne vois pas comment faire le tri si tu pouvais m'aider s'il te plait :

Car ici j'ai les deux requetes
$sql = "SELECT * FROM sport sp WHERE sp.id_entreprise = so.id_entreprise";
$sql1= "SELECT * FROM cinema sp WHERE c.id_entreprise = so.id_entreprise";

Apres il faut que j'essaie d'assembler les deux.
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329
14 janv. 2009 à 16:49
Moi je ferais un :
select sp.*, so.nom_societe from sport sp, societe so 
where so.id_entreprise = sp.id_entreprise 
order by so.nom_societe

Et
select c.*, so.nom_societe from cinema c, societe so 
where so.id_entreprise = c.id_entreprise 
order by so.nom_societe


Après à toi de regrouper les deux résultats.

Cordialement,
0
CicinhoRaul Messages postés 221 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 16 janvier 2009 7
14 janv. 2009 à 16:55
Ok Marco, encore merci de ton aide,je vais peut etre te deranger encore, mais j'arrive pas à regrouper les deux :S:S

J'ai pensé a faire un union mais rien ne fonctionne.
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 329
14 janv. 2009 à 17:05
Je t'ai dit que ça ne peut pas se faire en SQL.
Tes requêtes retournent des données différentes, SQL ne peut pas les regrouper. Si tes données sont à ce point semblables, la seule manière (mais c'est pas terrible du tout), c'est de les stocker dans une même table.

Ici, il faut que tu utilises php pour trier correctement les ressources retournées par tes deux requêtes.

Cordialement,
0