[PHP] interroger plusieurs tables

interroger plusieurs tables [PHP] - Programmation

Marsh Posté le 29-05-2001 à 18:56:56    

je bute là-dessus depuis un moment...
 
j'ai deux tables :
 
CREATE TABLE categories (
id_cat SMALLINT(255) UNIQUE NOT NULL AUTO-INCREMENT,
nom_cat VARCHAR(255) NOT NULL,
PRIMARY KEY(id_cat));
 
CREATE TABLE sscategories (
id_sscat SMALLINT(255) UNIQUE NOT NULL AUTO-INCREMENT,
id_cat SMALLINT(255) NOT NULL,
nom_sscat VARCHAR(255) NOT NULL,
PRIMARY KEY(id_sscat));
 
et je voudrais afficher, dans un tableau, la liste de toutes les catégories et
sous-catégories associées...
 
voilà ce que j'essaye mais sans succès :
 
$db = mysql_connect("host", "login", "password" );
mysql_select_db("ma_base",$db);
 
if ("sscat"==$page)
{
$resultcat = mysql_query("SELECT * FROM categories ORDER BY nom_cat", $db);
$resultsscat = mysql_query("SELECT * FROM sscategories ORDER BY nom_sscat",
$db);
}
 
<table border="1" cellpadding="5">
<tr>
<td bgcolor="#ffffec" colspan="2">
<b><center>LISTE DES SOUS-CATEGORIES DE LA BASE D'EXPLOITATION</b></center>
</td>
</tr>
<tr>
<td bgcolor="#ffffec">
<b>Catégories</b>
</td>
<td bgcolor="#ffffec">
<b>Sous-catégories</b>
</td>
</tr>
<tr>
<td bgcolor="#fffff9">
<?
while( $rowsscat = mysql_fetch_object($resultsscat) )
{
echo $rowcat->nom_cat;
}
?>
</td>
<td bgcolor="#fffff9">
<?
echo $rowsscat->nom_sscat;
}
mysql_close();
?>
</td>
</tr>
</table>
 
y'a peut-être une ou deux erreurs de ; et de } mais c'est un copier/coller
foireux :))
 
l'erreur c'est : "$rowcat n'est pas un objet" au niveau de l'affichage de la
catégorie en face de la sous catégorie (qui fonctionne bien elle...)
 
merci :))

Reply

Marsh Posté le 29-05-2001 à 18:56:56   

Reply

Marsh Posté le 29-05-2001 à 19:28:12    

çà s'appelle faire une jointure :D
t'as besoin d'une seule requête du genre
 
SELECT nom_cat,nom_sscat FROM categories,sscategories where categories.id_cat=sscategories.id_cat
 
tu peux mettre des alias sur les tables pour raccourcir un peu ta clause "WHERE" et tu peux aussi ajouter ton critère de tri avec la clause "ORDER BY"
 
 
SETI çà kil te faut ?? :D


---------------
Mes photos,Feed-Back HA/V
Reply

Marsh Posté le 29-05-2001 à 21:39:28    

oui c'est bien une jointure que je veux faire... mais pourquoi que je l'ai pas dis tout de suite ????
 
merci pour la requête tout faite :))
 
je ne savais pas que l'on pouvais faire des jointures en Mysql :))

Reply

Marsh Posté le 29-05-2001 à 23:15:26    

une solution aussi : dans ta table "Categories" tu ajoutes un champ "Parent" dans lequel tu mets 0 si c'est une categorie, ou le code de la categorie parente si c'est une sous-categorie.
Premiere requete : tu recuperes les categories :
select code from table where parent=0
pour chaque code
   select * from table where parent=code
   pour chaque sous categorie trouvee
     traitement
   finpour
finpour

Reply

Marsh Posté le 30-05-2001 à 00:35:18    

Tiens un petit code pour répondre à ton pb :
 
<?php
 
 $connect = mysql_connect("$host","$user","$password" );  
 
 $query = "SELECT c.nom_cat,s.nom_sscat FROM categories AS c, sscategories AS s WHERE c.id_cat=s.id_cat ORDER BY c.nom_cat";
 $result = mysql_db_query("$db",$query) or die ("Requête invalide" );
     
     
     
     $cat="";
 while($row = mysql_fetch_object($result))  
 {  
  if($cat!=$row->nom_cat)
  {
   echo "<br><b>".$row->nom_cat."</b><br>";  
   }
     
  $cat = $row->nom_cat;
  echo "     ".$row->nom_sscat."<br>";  
 }
 
?>

Reply

Marsh Posté le 30-05-2001 à 08:03:06    

Vous êtes trop sympas les mecs (y'a peut-être des filles...) !!!
 
Vous me mâchez le travail en plus !!  
 
A charge de revanche :)))
 
En plus c'est pour un site matos informatique :)) il pourra peut-être vous servir :))))

Reply

Marsh Posté le 30-05-2001 à 08:06:30    

pô de koi :D
le forum est fait pour çà.
 
vaut mieux poser çà question que rester bloquer des heures voire des journées entières devant son pb ;)

 

[edit]--Message édité par m@nou--[/edit]


---------------
Mes photos,Feed-Back HA/V
Reply

Marsh Posté le 30-05-2001 à 08:11:32    

je crois qu'on peut dire des jours :)))) en fait, j'ai commencé de bloquer grave au bout de quelques heures.... mais quand c'est bloqué, c'est bloqué... y'a plus rien à faire que lancer un sos.... je pensais y arriver seul... mais là, je regrette de pas avoir demandé plus tôt :))

Reply

Marsh Posté le 30-05-2001 à 10:31:39    

Bon, les autres t'on donner la solution idéale.
Pour ton message d'erreur, c'est apr ce que t'as deux variables :
$rowsscat qui est un objet et que t'affecte bien
$rowcat   qui n'est définis nulle part et qui n'est donc pas un objet
(erreur bète qui arrive à tout le monde)

Reply

Marsh Posté le 30-05-2001 à 10:36:10    

j'ai pourtant essayé de faire :
 
while( $rowsscat = mysql_fetch_object($resultsscat) )
{
  while( $rowcat = mysql_fetch_object($resultcat) )
  {
    echo $rowcat->nom_cat;
  }  
}
 
mais c'est idem....
 
je vais essayer cet am les solutions qui m'ont été données ici...
merci :)

Reply

Marsh Posté le 30-05-2001 à 10:36:10   

Reply

Marsh Posté le 30-05-2001 à 14:47:15    

m@nou a écrit a écrit :

SELECT nom_cat,nom_sscat FROM categories,sscategories where categories.id_cat=sscategories.id_cat




 
si je fais :
 
$result = mysql_query("SELECT nom_cat,nom_sscat FROM categories, sscategories where categories.id_cat=sscategories.id_cat ", $db);
 
while( $rowcat = mysql_fetch_object($result) )
  {
    echo $rowcat->nom_cat;
   }
 
et tout le toutim.... ça marche c'est formidable !! j'ai même rajouté de quoi faire des tris différents :)))))

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed