Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Optimisation mysql

1 réponse
Avatar
Anthony Rossetto - [vulgarisation-informatique.com]
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,r
eponse,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_derni
er_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 ça foire.

Comment faire pour que ma table forum ( RUBRIQUE | CAT | SUJET | MESSAGE |
REPONSE) soit en correspondance avec ma table consult (PSEUDO | RUBRIQUE |
CAT | CONSULT )

En clair si le membre est enregistré ($_SESSION[login]!=NULL) et que consult
est NULL ou est égal à 0, un dossier rouge s'affiche pour la catégorie en
cours, sinon (si le membre est enregistré et que consult est égal à 1 pour
la catégorie en cours, un dossier jaune s'affiche)

J'aimerais en fait que RUBRIQUE, CAT de fourm_consult se superposent à la
table forum en quelque sorte et qu'on ajoute les valeurs de consult et de
pseudo.

merci d'avance pour votre aide.

a +

1 réponse

Avatar
Guillaume Bouchard
Anthony Rossetto - [vulgarisation-informatique.com] wrote:

Bonjour à tous et bonne année 2004 !


De meme.

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


Mauvaise technique. Il falait le faire optimiser :), et non pas le faire
et l'optimiser ;o)

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());


Alors la, je t'en suplie, fait un truc propre avec une gestion d'erreur
correct.

$sql = "SELECT....";
$requete = mysql_query($sql) or die(mysql_error().$sql);

if($_SESSION[login]<>NULL)


if($_SESSION['login']...
// plus propre.

$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());


Même chose. De plus fait attention à tes magic_quotes.

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 :


Le bas blesse ?

Bref, pour le reste c'est du sql et tu trouveras surement de l'aide sur
les NG appropriés.

Au passage, A lire:

Les jointures sous mysql.
http://www.mysql.com/doc/en/JOIN.html
Optimisation SQL:
http://phpinfo.net/articles/article_optimisation-mysql.html
Un truc pour faire de belle requete SQL en gerant bien les magic_quotes:
http://guillaume.apinc.org/2003/aout/12/3-gerer_correctement_magic-quotes

Bonne lecture.

--
Guillaume.