selection avec jointure

Répondre
mouna
le 01/05/2005 à 19:34
mouna
bonjour

soit mes 2 tables, une pour les categories et une autre pour les sous categories:

CREATE TABLE `cat_tbl` (
`catid` int(11) NOT NULL auto_increment,
`Cat` varchar(255) NOT NULL default '',
UNIQUE KEY `catid` (`catid`)
) TYPE=MyISAM AUTO_INCREMENT=5 ;

#
# Dumping data for table `cat_tbl`
#

INSERT INTO `cat_tbl` VALUES (1, 'cat1');
INSERT INTO `cat_tbl` VALUES (2, 'cat2');
INSERT INTO `cat_tbl` VALUES (3, 'cat3');
INSERT INTO `cat_tbl` VALUES (4, 'cat4');

# --------------------------------------------------------

#
# Table structure for table `sous_cat_tbl`
#

CREATE TABLE `sous_cat_tbl` (
`id` int(11) NOT NULL auto_increment,
`catid` varchar(30) NOT NULL default '',
`Sous_Cat` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=7 ;

#
# Dumping data for table `sous_cat_tbl`
#

INSERT INTO `sous_cat_tbl` VALUES (1, '1', 'souscat1');
INSERT INTO `sous_cat_tbl` VALUES (2, '2', 'souscat2');
INSERT INTO `sous_cat_tbl` VALUES (3, '3', 'souscat3');
INSERT INTO `sous_cat_tbl` VALUES (4, '4', 'souscat4');
INSERT INTO `sous_cat_tbl` VALUES (5, '1', 'souscat11');
INSERT INTO `sous_cat_tbl` VALUES (6, '4', 'souscat41');

alor j ajoute des sous categories pour chaque categorie principale.
a la fin du compte, je veux recuperer les sous categories pour chacune des categories principale:

je fais ca:

$sql1 = mysql_query ("SELECT cat_tbl.catid, cat_tbl.Cat, sous_cat_tbl.id, sous_cat_tbl.catid, sous_cat_tbl.Sous_Cat FROM cat_tbl, sous_cat_tbl WHERE cat_tbl.catid = sous_cat_tbl.catid order by id ASC") or die ("erreur req ".mysql_error());

mais ca m affiche toutes les sous categories dans toutes les categories


merci d avance
moogli
le 01/05/2005 à 21:20
moogli
tu poste sur combien de forum ( et avc combien de pseudo ?) ?

@+
Il en faut peu pour être heureux !!!!!
mouna
le 01/05/2005 à 22:06
mouna
on est 4 personnes ki travaillent sur le meme projet afin de le presenter a la fin de l annnee, et on a le droit de le poster sur plusieurs forums pr avoir plus de certitudes dans nos resultats
moogli
le 02/05/2005 à 00:20
moogli
plus certitude dans dans vos résultats !

tu veut dire que vous avais peur de tomber sur des boulet et qu'en fesant un mixe de toutes réponse sa le feras ?

ceci dis c toi qui vois ( par contre sa va p'tet pas t'aider a avoir un max de réponse !)

@+
Il en faut peu pour être heureux !!!!!
mouna
le 02/05/2005 à 03:38
mouna
parfois on trouve le resultat d'une personne est mieux et facil a comprendre des autres, c pour cela k on essai de cumuler les infos partout, et ca te derange de partager les infos, on vs oblige pas, on est sur ke t as pas commence le zero par 5 mais par 0
mouna
le 02/05/2005 à 03:47
mouna
ca marche pas avec GROUP BY
<?php
$sql1 = mysql_query ("SELECT cat_tbl.catid, cat_tbl.Cat, sous_cat_tbl.id, sous_cat_tbl.catid, sous_cat_tbl.Sous_Cat FROM cat_tbl, sous_cat_tbl WHERE cat_tbl.catid = sous_cat_tbl.catid GROUP BY id") or die ("erreur req ".mysql_error());
?>
mojorisin
le 02/05/2005 à 08:07
mojorisin
SELECT c.catid,c.Cat,sc.id,sc.Sous_Cat
FROM cat_tbl AS c
LEFT JOIN sous_cat_tbl AS sc
ON sc.catid=c.catid
ORDER BY catid
echo ’16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D4D465452snlbxq’|dc
zebden
le 02/05/2005 à 10:26
zebden
Le problème avec LEFT JOIN, c'est qu'il va te retourner qu'un seul enregistrement.

Au pire tu fais deux requêtes, le plus simple ici je pense (pas forcement le mieux) .
Soit on utilise LEFT JOIN mais sous cette forme :

SELECT c.catid,c.Cat,sc.id,sc.Sous_Cat FROM sous_cat_tbl AS sc LEFT JOIN cat_tbl AS c USING (`catid`) ORDER BY catid

Tu aura toutes les sous catégorie avec la categorie qui correspond.
zebdinou pour les intimes / Blog : http://www.zebden.fr
mouna
le 02/05/2005 à 15:17
mouna
ca donne toujours le meme resultat:
voila la source:
<?
// settings
include ("config.php");

if(isset($_POST["Sous_Cat"])) $Sous_Cat = $_POST["Sous_Cat"];
else $Sous_Cat = "";
if(isset($_POST["Cat"])) $Cat = $_POST["Cat"];
else $Cat = "";
if(isset($_POST["catid"])) $catid = $_POST["catid"];
else $catid = "";
if(isset($_POST["Sous_Cat_id"])) $Sous_Cat_id = $_POST["Sous_Cat_id"];
else $Sous_Cat_id = "";

$connection = mysql_connect("$host", "$user", "$pass") or die(mysql_error());
$db = mysql_select_db($db_name, $connection) or die(mysql_error());
$sql = mysql_query ("select * from $table_name_gbook order by catid ASC") or die ("erreur req ".mysql_error());
//le <select> et </select> doit être créé hors de la boucle while, sinon tu en crées un par option.
?>
<table border="1" width="75%" align="center"><tr> <? //debut de notre tableau avec une nouvelle ligne ?>
<?php
$i = 0;
while( $sortie = mysql_fetch_array($sql))
{
$Cat = $sortie['Cat'];
if ( ($i%3 )==0 && $i!=0){
//% est le reste d une division (5/2 %= 1 2*2-5)et le i doit etre differente de 0 $i!=0
//http://www.lephpfacile.com/forums/read_msg.php?f=1&id=3646
//http://www.tizag.com/phpT/operators.php
//http://www.w3schools.com/php/php_operators.asp
?>
</tr><tr> <? //fin de la premiere ligne et ajout d une nouvelle ligne ?>
<?php
}
echo "<td width=\"25%\"><a href=\"Sous_Cat.php?id=".$sortie['catid']."\">".$Cat."<br/></a>"; //display des sous_cat avec lien de leurs id ds les cellules

//$sql1 = mysql_query ("SELECT * FROM cat_tbl AS c JOIN sous_cat_tbl AS sc ON c.catid = sc.catid ORDER BY sc.id") or die ("erreur req ".mysql_error()); // ASC est la valeur par défaut donc inutile
//$sql1 = mysql_query ("select * from $table_name1 WHERE catid ='1' order by id ASC") or die ("erreur req ".mysql_error()); //un limit de 4 sous_cat
$sql1 = mysql_query("SELECT c.catid,c.Cat,sc.id,sc.Sous_Cat FROM sous_cat_tbl AS sc LEFT JOIN cat_tbl AS c USING (`catid`) ORDER BY catid") or die ("erreur req ".mysql_error());
//http://sqlcourse2.com/joins.html
//http://www.phpfrance.com/forums/voir_sujet-2418-texte-jointure.php
//http://www.commentcamarche.net/sql/sqljoint.php3


while( $row = mysql_fetch_array($sql1))
{
$Sous_Cat = $row['Sous_Cat'];
echo "<a href=\"Sous_Cat_Site.php?id=".$row['id']."\">".$Sous_Cat."</a>&nbsp;|&nbsp;"; //display les liens des sous_cat avec un espace avec separateur
//echo "<td width=\"25%\"><a href=\"index.php&id=".$sortie['id']."\">".$Cat."<br/></a>";
}//fin de boucle
if (($Sous_Cat)>4); //si le nbre de sous_cat est > 4 on fait retour a la ligne et ecir More
echo "<br/><a href=\"Sous_Cat.php?id=".$sortie['catid']."\">More</a>"; //display des sous_cate avec lien de leurs id ds les cellules

echo "</td>"; // on ferme notre cellule
$i++;
}//fin de boucle
?>
</table>
<?
//after verifying everything, must be inserted then redirected :)
mysql_close ();
?>
Répondre
LoadingChargement en cours