Simplification de ma requête MySQL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Simplification de ma requête MySQL

par Cyrano » 24 janv. 2006, 22:01

As-tu testé ce code dans un premier temps ?

Réponse

par c2pk » 24 janv. 2006, 21:58

Merci pour ton effort de réponse.

Cependant je reviens vers toi car je n'ai pas saisi l'utilité des lignes citées ci dessous (en particulier le rôle de la variable $cs) :
 
        if($tabres['nom_cat'] != $cs)
        {
            if(!empty($cs))
            {
                echo"</ul>"; 
            }
            echo"<h2>". $tabres['nom_cat'] ."</h2>";
            echo"<ul>";
            $cs = $tabres['nom_cat'];
        }
        echo"<li>".$tabres['nom_site']."</li>";
    }
    echo"</ul>";
}
?>

par Cyrano » 24 janv. 2006, 21:48

La première formule avait plus d'allure mais dans les deux cas de toutes façon incomplet au niveau SQL et un peu trop simpliste au niveau PHP. Proposition:
<?php
$sql  = "SELECT nom_cat, nom_site ".
        "FROM categorie AS c, site AS s ".
        "WHERE c.num_cat = s.num_cat ".
        "ORDER BY num_site, c.num_cat";
$req = mysql_query($sql);
/* On compte les résultats */
$nb_sites = mysql_num_rows($req);
if($nb_sites > 0)
{
    /* Pointeur de catégorie */
    $cs = "";
    while($tabres = mysql_fetch_array($req))
    {
        if($tabres['nom_cat'] != $cs)
        {
            if(!empty($cs))
            {
                echo"</ul>";
            }
            echo"<h2>". $tabres['nom_cat'] ."</h2>";
            echo"<ul>";
            $cs = $tabres['nom_cat'];
        }
        echo"<li>".$tabres['nom_site']."</li>";
    }
    echo"</ul>";
}
?>
Essaye comme ça et reviens si tu ne comprends pas quelque chose;

Simplification de ma requête MySQL

par netcodeur » 24 janv. 2006, 19:54

Bonjour. Je bute actuellement face à une requête MySQL.

Je dispose de 2 tables : CATEGORIE et SITE.

En simplifiant on a le MLD suivant :

- CATEGORIE (num_cat, nom_cat)
- SITE (num_site, nom_site, #num_cat)

Je souhaiterai faire apparaitre ceci :
{nom_cat1}
------------------------------
- {nom_site1}
- {nom_site2}

{nom_cat2}
------------------------------
- {nom_site3}
- {nom_site4}
Vous voyez le genre ?

Actuellement j'ai pensé faire la requête suivante avec une jointure entre les 2 tables :
$sql="select * from categorie,site ";
$sql.="where categorie.num_cat=site.num_cat";
$req=mysql_query($sql);
while($tabres=mysql_fetch_array($req))
{
	echo"<h2>".$tabres["nom_cat"]."</h2>";
	echo"<ul>";
	echo"<li>".$tabres["nom_site"]."</li>";
	echo"</ul>";
}
Mais il y a un hic. Cela m'affiche en sortie ceci :
{nom_cat1}
------------------------------
- {nom_site1}

{nom_cat1}
------------------------------
- {nom_site2}

{nom_cat2}
------------------------------
- {nom_site3}
J'ai donc modifier cette requête mais je pense qu'il en existe une beaucoup plus simple que

celle-ci mais laquelle :
$sql="select * from categorie";
$req=mysql_query($sql);
while($tabres=mysql_fetch_array($req))
{
        $num_cat = $tabres["num_cat"];
        $nom_cat = $tabres["nom_cat"];
        
        echo"<h2>".$nom_cat."</h2><ul>";

        $sql2="select * from site where num_cat=$num_cat";
        $req2=mysql_query($sql2);
        while($tabres2=mysql_fetch_array($req2))
                echo"<li>".$tabres2["nom_site"]."</li>";

 	echo"</ul>";
}

Merci de votre aide.