Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Débuter
Débuter Forum d'entraide pour débuter avec MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/06/2004, 15h35   #1
Invité de passage
 
Inscription : septembre 2003
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 22
Points : 2
Points : 2
Par défaut Requete entre 2 tables.

Bonjour,

Je ne suis pas un pro du SQL!
J'utilise MySQL pour travailler avec PhP.
Je voudrais faire une requête entre 2 tables de ma base de données.
Voici comment je m'y prend!
Code :
1
2
3
4
5
 
SELECT categories. * , mod_ressources. * 
FROM  `categories` , mod_ressources
WHERE categories.id = mod_ressources.id_categorie
ORDER  BY categories.titre AND mod_ressources.nom
Le problème, lorsque je le traite comme ca, dans ma page PhP, c'est qu'il me sort autant de categories que de mod_ressources.

Ce que je veux faire c'est d'afficher les categories de mes ressources. Par exemple, mod_ressources possède 20 enregistrements avec une certaines categories.

Dans ma page PHP. Je veux afficher en en-tête ma categories et afficher les ressources que contient cette catégories. Est-ce que je suis mieux d'y aller avec 2 requêtes distincte SQL ou je peux procéder avec MySQL pour ce traitement!

Merci de votre aide.

bonne journée!
stebar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2004, 15h50   #2
Membre régulier
 
Avatar de Vince
 
Inscription : mars 2002
Messages : 206
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 206
Points : 72
Points : 72
Si j'ai bien compris ta question tu dois avoir un résultat du type :
Groupe 1 --> Machin
Groupe 1 --> Truc
Groupe 1 --> Bidule
Groupe 2 --> chose
Groupe 2 --> ...

Or tu ne veux afficher que
Groupe 1 :
- Machin
- Truc
- Bidule

Groupe 2 :
- chose
- ...


Tu dois faire un GROUP BY :
Code :
1
2
3
4
SELECT .....
...
ORDER BY...
GROUP BY categories.titre
Vince est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2004, 15h55   #3
Invité de passage
 
Inscription : septembre 2003
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 22
Points : 2
Points : 2
Un grand merci. Ca marche parfaitement.

bye!
stebar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2004, 16h03   #4
Invité de passage
 
Inscription : septembre 2003
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 22
Points : 2
Points : 2
Bon, Je pensais que c'était résolu mon problème, mais non, la je me retrouve avec seulement 1 enregistrement par catégories.

Qu'est-ce qui n'est pas correct dans ma requete? J'ai penser que c'était ma clause WHERE, mais ca ne semble pas être le cas.

Merci de m'aider.
stebar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2004, 16h14   #5
Membre régulier
 
Avatar de Vince
 
Inscription : mars 2002
Messages : 206
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 206
Points : 72
Points : 72
Dsl j'ai repensé aprés que ça ne devait pas être ça...
Ce que tu peux faire c'est une requete sur ta table catégorie avec le GROUP BY pour n'avoir chaque catégorie qu'une fois, puis tu lis ton jeu d'enregistrement (boucle), et tu mets le id l'enregistrement courant lu en paramètre de ta requete SELECT .... WHERE categorie.id='$id_courant'. Dsl c'est pas évident à expliquer sans code...
Vince est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2004, 16h21   #6
Invité de passage
 
Inscription : septembre 2003
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 22
Points : 2
Points : 2
Je ne suis pas sur de très bien comprendre ce que tu veux dire.
Je fais une requête pour avoir mes catégories du genre
Code :
1
2
 
SELECT * FROM categories;
et j'y fait une boucle ensuite, dans ma boucle j'y fait quelque chose du genre :
Code :
1
2
 
SELECT * FROM mod_ressources WHERE id='$idcategories';
C'est bien ca? Si oui, c'est peut-être moi, mais je vais me retrouver toujours avec les mêmes requetes dans ma boucle non? Parce que si je refait une requete a chaque boucle, et bien il va recommencer a zero non?

Merci, bye!
stebar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2004, 16h39   #7
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
ah ok je viens de comprendre ton problème
le mieux c'est de faire 1 seule grosse requête c'est beaucoup plus rapide et ensuite dans ton code php tu utilises una variable pour savoir si tu as changé de catégorie

inspire toi de ca :
http://www.developpez.net/forums/viewtopic.php?p=1114910#1114910
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2004, 16h53   #8
Invité de passage
 
Inscription : septembre 2003
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 22
Points : 2
Points : 2
mathix, je ne sais pas ou tu as vue une seule grosse requete dans le lien que tu as inscrits. J'ai vraiment rien compris dans ce qui a été traiter dans le sujet de discussion. D'après ce que j'ai compris, ca revient au même que ce que Vince m'a parlé!

J'ai essayer ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
while($rCategories = mysql_fetch_array($REQCategorie)
{
   while($rRess = mysql_fetch_array($REQRessource)
  {
     IF($rRess["id_categorie"] == rCategories["id"])
     {
          echo "Titre";
      }
   }
}
Mais voilà, ca ne donne pas le resultat que je veux. Il me sort aussi les categories qui ne contiennent pas de ressources.

J'ai chercher aussi du coter du DISTINCT, mais ca ne semble pas donner le resultat que je recherche aussi.

Merci de votre aide.
stebar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2004, 17h27   #9
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
ce que j'appelle "grosse requête" c'est la 1ère requête que tu as proposé
ce que tu fais c'est récupérer toutes les ressources et les catégories avec un tir par catégories
en suite tu fais une seule boucle "while" et tu testes si tu es encore dans la même catégorie que précédemment à l'aide du code que j'ai proposé
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2004, 17h39   #10
Invité de passage
 
Inscription : septembre 2003
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 22
Points : 2
Points : 2
Ok, mais je dois etre trop debutant parce que je comprends pas a quoi ton lien s'applique a moi, j'ai essayer et c'est loin de fonctionner!

Ca me prendrais 2 boucles while.
- une pour avoir la liste des categories..
- et l'autre pour verifier si la ressources contient la categories

entk, du moin il me semble que ca devrait être comme ca non?
Parce que sinon, je comprend vraiment pas!

Merci d'eclairer mon esprit.
stebar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2004, 11h33   #11
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
non en fait tu fais une seule requete (et donc une seule boucle while) où tu récupère la resosurce et le service associé
par exemple ta requête retourne ca :
Code :
1
2
3
4
5
6
7
ressource     | service    
--------------+----------------
res2          | serv1
res23         | serv1
res5          | serv2
res10         | serv2
res17         | serv2
et comme ca tu fais une boucle while sur ce résultat et tu testes à chaque fois si le service à changé ou pas pour la mise forme de tes résultats
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2004, 16h21   #12
Invité de passage
 
Inscription : septembre 2003
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 22
Points : 2
Points : 2
ok, merci, ca la fonctionner.

bye
stebar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h19.


 
 
 
 
Partenaires

Hébergement Web