Aide php/mysql requête svp

  • Auteur de la discussion Auteur de la discussion robin23s
  • Date de début Date de début
Nouveau WRInaute
Bonjour à tous, merci de me lire
Je débute en php/mysql, et j'aurais une question à vous posez concernant une requête mysql.

J'ai une base de données avec :
une Table Categories
qui comporte les champs :
id
id_cat_mere
cat_name
une autre Table nommé : Site
qui comporte les champs :
id
id_cat
titre
...

Mon problème :
Je n'arrive pas à afficher les sites contenu dans la catégorie principal car le champ id_cat de la table site et = au champ id de la table categories donc je suis obliger de me positionné dans la sous catégorie pour voir les site enregistrer.
Je voudrais savoir comment afficher les sites enregistrer dans les sous catégorie pour tous les afficher dans la catégorie principal... ( j'espère que quelqu'un me comprend )lol

Je compte ajouter un champ id_cat_mere à la table site pour n'avoir qu'une simple requête à faire du style :
SELECT * FROM site WHERE id_cat_mere=2

Mais je sais pas comment faire, quand j'enregistre un site le champ id_cat correspond à id de la table categories. Je voudrais donc que le nouveau champ id_cat_mere soit lier au champ id_cat_mere de la table categories...
 
WRInaute accro
Je ne suis pas sûr d'avoir tout compris à la question, mais pourquoi un *left* join? Un join tout court me semble plus logique ici, non? Le left join va afficher tous les sites, mêmes s'il n'y a pas de catégorie qui va avec (ce qui n'est pas forcément possible, mais n'est probablement pas souhaité).

Jacques.
 
Nouveau WRInaute
Robinson a dit:
Code:
SELECT * FROM site LEFT JOIN categories ON categories.id = id_cat WHERE id_cat_mere=2

Merci pour ta réponse :wink:

En faite comme je les expliquer j'ai une table avec des champs :
id cat id_cat_mere nom
1 0 categorie-1 (zero site)
2 0 categorie-2 (zero site)
3 1 souscategorie1 (100 sites présent)
4 1 souscategorie1.2 (200 sites présent)
5 2 souscategorie2
Et une autre table site qui contient les sites et l'id de la catégorie, mon problème est que si je me trouve dans la catégorie 1 il y à zero site à la racine il faut que je navigue sur les sous catégories ou ils se trouvent...
Je voudrais affiche quand je suis sur la catégorie 1 par exemple tout les sites se trouvant dans toute les sous catégories...

J'ai penser à rajouter un champ id_cat_mere dans la table des sites en plus de celle de la table catégorie, tu en pense quoi ?

J'ai tester et cela marche mais j'arrive pas à afficher les sites sur plusieurs pages maintenant lol :oops: mon code est :

Code:
	//creation des requetes pour trouver les sous-categories, les sites et la description de la categorie
	$sql_descr = "SELECT texte,cat_name FROM $T_categories WHERE id = '$cat_id' ";
	$sql_nb_sites = "SELECT id FROM $T_sites WHERE id_cat = '$cat_id' AND activation = 1 ";
	$sql_site = "SELECT *,TO_DAYS(CURRENT_DATE) - TO_DAYS(date_validation) AS dif_days FROM $T_sites WHERE id_cat = '$cat_id' AND activation = 1 ORDER BY niveau ASC,id DESC LIMIT $debut,$nb_sites_on_page";
	$sql_site_cat = "SELECT *,TO_DAYS(CURRENT_DATE) - TO_DAYS(date_validation) AS dif_days FROM $T_sites WHERE id_cat_mere = '$cat_id' AND activation = 1 ORDER BY niveau ASC,id DESC LIMIT $debut,$nb_sites_on_page";
	$sql_scat = "SELECT id, cat_name, texte FROM $T_categories WHERE id_cat_mere = '$cat_id' AND activation = 1 ORDER BY cat_name ASC";
	
	//envoi des requetes 
	$res_descr = send_sql($sql_descr,"trouver la description de cette catégorie");
	$res_nb_sites = send_sql($sql_nb_sites,"trouver le nombre de sites à afficher");
	$res_site = send_sql($sql_site,"trouver les sites à afficher");
	$res_site_cat = send_sql($sql_site_cat,"trouver les sites à afficher cat principal");
	$res_scat = send_sql($sql_scat,"trouver les sous-catégories");
	
	//calcul du nombre de pages
	$nb_sites = mysql_num_rows($res_nb_sites);
	$nb_pages = ceil($nb_sites / $nb_sites_on_page);

	//affichage de l'arbo_inline
	echo '<center>' .show_arbo_en_ligne($cat_id). '</center>';
	echo '<br />';
	echo '<hr width="60%" />';
	
	//on affiches les sous-categories	
	if (mysql_num_rows($res_scat))
	//si il y a des sous-categories
	{
		
		echo '<table width="75%" border="0" align="center">';
		
		$i=0;
		while ($resultat = mysql_fetch_array($res_scat,MYSQL_ASSOC))
		{
			$url_de_la_scat = id_to_url($resultat["id"],$resultat["cat_name"],'1');
			$nom_de_la_scat = htmlspecialchars($resultat["cat_name"]);
			$nb_de_sites_scat = get_nbsites($resultat["id"]);
			if(empty($resultat['texte']))
				$description_de_la_scat = $nom_annuaire. ' - ' .$nom_de_la_scat;
			else
				$description_de_la_scat = $nom_annuaire. ' - ' .$nom_de_la_scat. ' - ' .$resultat['texte'];
			
			if ($i%2 == 0) //colonne de gauche
			{
				if($i != 0)
					echo "</tr>\n";
				echo "<tr>\n";
			}
			echo '<td width="50%" align="center" height="30">';
			echo '<img src="img/dossier.gif" border="0" />';
			echo '<a href="' .$url_de_la_scat. '" title="' .$description_de_la_scat. '" class="link_scat_other_annuaire">' .$nom_de_la_scat. '</a>';
 			echo ' <span class="nb_scat_other_annuaire">(' .$nb_de_sites_scat. ')</span>';
			echo "</td>\n";
			$i++;
		}
		//fin du tableau puis separateur
		echo '</table>';
		echo '<br />';
		echo '<hr width="75%" />';
		echo '<br />';
	}

	//on affiche la description de la catégorie
	$res_texte = mysql_fetch_array($res_descr,MYSQL_ASSOC);
	if ($res_texte["texte"])
	//si on a une description a affiche
	{
		echo '<p style="text-align:center;" class="text_cat_annuaire">';
		echo htmlspecialchars($res_texte["texte"]);
		echo '</p>';
		echo '<br /><br />';
	}
	
	//affichage de la ligne de liens numerotes pour les pages
	if ($nb_sites > $nb_sites_on_page)
	//si il y a trop de sites a afficher sur la page
	{
		?>
<p class="link_numpage_annuaire" style="text-align:center;">
  <?php
		for ($i=1;$i<$nb_pages;$i++)
		{
			if ($i != $page)
				echo "<a href=\"".id_to_url($cat_id,$res_texte["cat_name"],$i)."\">$i</a>";
			else
				echo "$i";
			echo " - ";
		}
		//on affiche le dernier numero de page (sans tiret apres)
		if ($i == $page)
			echo $i;
		else
			echo "<a href=\"".id_to_url($cat_id,$res_texte["cat_name"],$i)."\">$i</a>";
		?>
</p>
<br />
<br />
<?php
	}

	//on affiche les sites	
	if (mysql_num_rows ($res_site))
	{
		while ($resultat = mysql_fetch_array($res_site,MYSQL_ASSOC))
			affiche_site($resultat,'index');
	}
	echo "<br /><br />\n";
	//affichage de la ligne de liens numerotes pour les pages
	if ($nb_sites > $nb_sites_on_page)
	//si il y a trop de sites a afficher sur la page
	{
		?>
<p class="link_numpage_annuaire" style="text-align:center;">
  <?php
		for ($i=1;$i<$nb_pages;$i++)
		{
			if ($i != $page)
				echo "<a href=\"".id_to_url($cat_id,$res_texte["cat_name"],$i)."\">$i</a>";
			else
				echo "$i";
			echo " - ";
		}
		//on affiche le dernier numero de page (sans tiret apres)
		if ($i == $page)
			echo $i;
		else
			echo "<a href=\"".id_to_url($cat_id,$res_texte["cat_name"],$i)."\">$i</a>";
		?>
  <?php
	}

	//on affiche les sites présent dans les sous catégorie
	if (mysql_num_rows ($res_site_cat))
	{
		while ($resultat = mysql_fetch_array($res_site_cat,MYSQL_ASSOC))
			affiche_site($resultat,'new');
	}
	echo "<br /><br />\n";
	//affichage de la ligne de liens numerotes pour les pages
	if ($nb_sites > $nb_sites_on_page)
	//si il y a trop de sites a afficher sur la page
	{
		?>
</p>
<br />
<br />
<?php
	}	
	if (!mysql_num_rows($res_site) and !mysql_num_rows($res_scat) ) //pas de site dans la categorie ni de sous categorie
	{
		?>
<p style="text-align:center;" class="no_site_in_cat_annuaire"> Pas encore de sites dans cette catégorie ! <br />
  Profitez en pour y ajouter votre site si il correspond à cette catégorie </p>
<?php
	}

	//fin de la connexion
	mysql_close($lk);
}   

include ("bas.php"); //pied de la page 
//fichier qui contient tout ce qui doit venir avant le code de l'annuaire (menu de droite....)
include("after.php");

?>
 
Discussions similaires
Haut