Aide php/mysql requête svp

robin23s
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 3
Inscription: 9 Aoû 2009

Aide php/mysql requête svp

Message le Dim Aoû 09, 2009 18:30

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...

Robinson
WRInaute passionné
WRInaute passionné
 
Messages: 2233
Inscription: 25 Oct 2005

Re: Aide php/mysql requête svp

Message le Dim Aoû 09, 2009 19:49

Code: Tout sélectionner
SELECT * FROM site LEFT JOIN categories ON categories.id = id_cat WHERE id_cat_mere=2

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2685
Inscription: 13 Fév 2004

Re: Aide php/mysql requête svp

Message le Lun Aoû 10, 2009 3:19

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.

robin23s
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 3
Inscription: 9 Aoû 2009

Re: Aide php/mysql requête svp

Message le Lun Aoû 10, 2009 13:39

Robinson a écrit:
Code: Tout sélectionner
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: Tout sélectionner
   //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");

?>


robin23s
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 3
Inscription: 9 Aoû 2009

Aide php un petit coup de pouce ?

Message le Lun Aoû 10, 2009 18:39

Personne pour me donner un petit coup de pouce ? :oops: :oops:


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité