interroger plusieurs tables [PHP] - Programmation
Marsh Posté le 29-05-2001 à 19:28:12
çà s'appelle faire une jointure
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 ??
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 )
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
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>";
}
?>
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 )))
Marsh Posté le 30-05-2001 à 08:06:30
pô de koi
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]
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 )
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)
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
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 ))))
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 )