Plusieurs requêtes SQL a optimiser

Résolu
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 11 janv. 2004 à 12:33
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 12 juin 2005 à 21:51
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

jdaviaud Messages postés 151 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 8 octobre 2013
12 janv. 2004 à 09:41
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
3
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
12 janv. 2004 à 18:21
Merci c'est sympa pour les tuyaux mais ça ne résoud toujours pas ma requête.

a +
3
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
12 juin 2005 à 21:51
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>
3
Rejoignez-nous