Plusieurs requêtes SQL a optimiser

Résolu
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
-
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
-
Bonjour à tous et bonne année 2004 !

Voilà je me suis fait un forum perso et j'aimerais bien l'optimiser.

J'ai deux tables : une table forum qui contient les champs suivants :

cat,posteur,sujet,clos,type,pseudo_dernier_post,date_dernier_post,rubrique,reponse,id_mess

et une autre table qui sert seulement si le membre est enregistré et qui affiche un dossier rouge ou jaune pour savoir si il y a des nouveaux messages.

Cette table contient quatre champs (et s'appelle forum_consult): pseudo,cat,consult,rubrique

si consult est a zéro le topic correspondant à la catégorie (cat) renverra un dossier rouge, si il est à un un dossier jaune.

Voici le code pour afficher le tout sans les dossiers :

$requete=mysql_query("select cat,posteur,sujet,clos,type,pseudo_dernier_post,date_dernier_post from forum WHERE rubrique=\"$_GET[rubrique]\" AND reponse=0 order by type DESC,id_mess DESC LIMIT $debut,$limite") or die(mysql_error());
$requetes++;
while($r=mysql_fetch_array($requete))
{

if($_SESSION[login]<>NULL)
{
//SI LE MEMBRE A CONSULTE CETTE CATEGORIE
$res=mysql_query("select SQL_SMALL_RESULT COUNT(consult) FROM forum_consult WHERE cat=\"$cat\" and rubrique=\"$_GET[rubrique]\" and pseudo=\"$_SESSION[login]\" LIMIT 1") or die(mysql_error());
$count=mysql_fetch_row($res);
$nbre=$count[0];
$requetes++;
}
Else
{
$nbre=0;
}
$consultation=0;
if($nbre<>0)
{
$consultation=1;
}
if($type==0)
{
if($consultation==0)
{
//AFFICHAGE D'UN DOSSIER ROUGE
}
Else
{
//AFFICHAGE D'UN DOSSIER JAUNE
}
}
}
}

Vous voyez que le bas blesse quand je fais la requête dans la boucle. J'ai essayé de faire un select multiple comme ceci :

$requete=mysql_query("select forum.cat,forum.posteur,forum.sujet,forum.clos,forum.type,forum.pseudo_dernier_post,forum.date_dernier_post,forum_consult.cat as cat_consult,forum_consult.consult from forum,forum_consult WHERE forum_consult.rubrique=\"$_GET[rubrique]\" AND forum_consult.pseudo=\"$_SESSION[login]\" AND forum_consult.cat=forum.cat AND forum.rubrique=\"$_GET[rubrique]\" AND forum.reponse=0 order by forum.type DESC,forum.id_mess DESC LIMIT $debut,$limite") or die(mysql_error());

mais le problème est que quand il n'y a pas d'enregistrement dans la table consult (si le membre n'a jamais consulté le topic), rien ne s'affiche et donc plus de sujets !!!!

merci d'avance pour votre aide.

a +

3 réponses

Messages postés
151
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
8 octobre 2013

J'ai remarqué de ma propre expérience que SQL n'aime pas les variables composées dans ses requetes

C'est a dire les variables du style $Toto[Titi]

Essaye de définir tes variables avant la requete

$titi = $Toto[Titi];
Et ensuite tu utilise $titi dans ta requete.

Ton probleme ne vient peut etre pas de ca, mais je sais que sur certains hébergeurs, ce genre d'utilisation de variables dans des requetes pause probleme

Et autre chose, sur ta ligne
$res=mysql_query("select SQL_SMALL_RESULT COUNT(consult)

utilise le "@" devant mysql_query car dans le cas où y'aura pas de résultats retournés, t'auras une erreur sql qui s'affiche au lieu de continuer le traitement

Amicalement
Julien
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Merci c'est sympa pour les tuyaux mais ça ne résoud toujours pas ma requête.

a +
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
quel code affreux quand je le revois ^^

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>