Comment simplifier une double requête SQL?

  • Auteur de la discussion Auteur de la discussion tryan
  • Date de début Date de début
WRInaute passionné
Bonjour,

Est-il possible de simplifier la double requête suivante et si oui, comment?
Code:
<?php
//On selectionne les données pour afficher les X derniers articles
$result1 = mysql_query("SELECT id,id_categorie,titre,description,titre_rewrite,date FROM CONTENU WHERE valide = 'oui' ORDER BY id DESC LIMIT ".$nombre_article_accueil."");
while($affiche = mysql_fetch_array($result1))
{
	//on va chercher le nom du dossier pour chaque article
	$dossier_article = mysql_query("SELECT nom_categorie,titre_rewrite FROM CATEGORIES WHERE id='".mysql_real_escape_string($affiche['id_categorie'])."'");
	
	while($nom_dossier = mysql_fetch_array($dossier_article))
	{
		$nom_du_dossier=$nom_dossier['titre_rewrite'];
		$titre_categorie=$nom_dossier['nom_categorie'];
	}
	//------fin nom de dossier---------------

	echo '<h2 class="h2"><a title="'.$affiche['titre'].'" href="http://'.$_SERVER['HTTP_HOST'].'/'.$nom_du_dossier.'/'.$affiche['titre_rewrite'].'">'.$affiche['titre'].'</a></h2>';
}
?>
Merci
 
WRInaute impliqué
Salut,

Sauf erreur de ma part, ça devrait donner un truc du genre :
Code:
<?php
//On selectionne les données pour afficher les X derniers articles
$sql = "SELECT co.id AS contenu_id, co.id_categorie, co.titre AS contenu_titre, co.description AS contenu_description, co.titre_rewrite AS contenu_titre_rewrite, co.date AS contenu_date, ca.nom_categorie AS titre_categorie, ca.titre_rewrite AS nom_du_dossier
FROM CONTENU co INNER JOIN categories ca ON co.id_categorie = ca.id
WHERE co.valide = 'oui' ORDER BY contenu_id DESC LIMIT ".$nombre_article_accueil";

$result1 = mysql_query($sql);
while($affiche = mysql_fetch_array($result1))
{
  extract ($affiche);
   echo '<h2 class="h2"><a title="'.$titre.'" href="http://'.$_SERVER['HTTP_HOST'].'/'.$nom_du_dossier.'/'.$contenu_titre_rewrite.'">'.$contenu_titre.'</a></h2>';
}
?>
 
WRInaute passionné
Grand merci MarvinLeRouge, ça fonctionne nickel :wink: mais comme à chaque fois que l'on me sort une jointure...j'ai le cerveau qui ne suit pas ^^!
Je décortique la bête dans tout les sens pour comprendre et c'est loin d'être gagné :D ...

Encore merci.
 
WRInaute passionné
Je fais des testes "de compréhensions" et un truc m'échappe...
Code:
$result = mysql_query("SELECT id,nom_categorie FROM CATEGORIES ORDER BY id ASC");

while($affiche = mysql_fetch_array($result))
{
	echo '<h1><a title="'.$affiche['nom_categorie'].'" href="categorie.php?id='.$affiche['id'].'">'.$affiche['nom_categorie'].'</a></h1>';

	$result1 = mysql_query("SELECT id, titre FROM CONTENU WHERE id_categorie =  '".$affiche['id']."'");
	
	while($affiche1 = mysql_fetch_array($result1))
	{
		echo '<a title="'.$affiche1['titre'].'" href="page.php?id='.$affiche1['id'].'">'.$affiche1['titre'].'</a><br/>';
	}
}
M'affiche :
categorie 1
article 1
article 2
article 3
categorie 2
article 1
categorie 3
categorie 4
categorie 5
Maintenant je teste avec une jointure :
Code:
$jointure = mysql_query("SELECT 
table_categories.id AS categories_id, 
table_categories.nom_categorie AS categories_nom_categorie, 

table_contenu.id AS contenu_id, 
table_contenu.titre AS contenu_titre 

FROM CATEGORIES table_categories INNER JOIN CONTENU table_contenu 
ON table_categories.id = table_contenu.id_categorie   
ORDER BY categories_id ASC
");
while($affiche11 = mysql_fetch_array($jointure))
{
	extract ($affiche11);
	echo '<h1><a title="'.$categories_nom_categorie.'" href="categorie.php?id='.$categories_id.'">'.$categories_nom_categorie.'</a></h1>
		<a title="'.$contenu_titre.'" href="page.php?id='.$contenu_id.'">'.$contenu_titre.'</a><br/>
		';
}
et ça m'affiche :
categorie1
article 1
categorie 1
article 2
categorie 1
article 3
categorie 2
article 1
etc...
et ça ne m'affiche pas les catégories qui ne comportent pas d'articles...
Ou est mon erreur svp?

Merci
 
Discussions similaires
Haut