IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Optimiser cette requête


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 112
    Par défaut Optimiser cette requête
    salut tout le monde
    cette requête prend du temps pour afficher les topics dans mon forums
    je me demande si je peux l'optimiser et rendre l'execution plus rapide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    function topics($name, $id){
    	$sql = mysql_query("SELECT * FROM ".prefix."TOPICS WHERE TOPIC_ID = '".intval($id)."' ") or die(mysql_error());
    	if(mysql_num_rows($sql)>0){
    		$rs = mysql_fetch_array($sql);
    		$topics = Array(
    			$rs[CAT_ID], $rs[FORUM_ID], $rs[T_STATUS], $rs[T_SUBJECT],
    			$rs[T_MESSAGE], $rs[T_REPLIES], $rs[T_COUNTS], $rs[T_AUTHOR],
    			$rs[T_DATE], $rs[T_LAST_POST_AUTHOR], $rs[T_LAST_POST_DATE], $rs[T_ARCHIVE_FLAG],
    			$rs[T_STICKY], $rs[T_HIDDEN], $rs[T_TOP], $rs[T_LINKFORUM],
    			$rs[T_LASTEDIT_DATE], $rs[T_LASTEDIT_MAKE], $rs[T_LOCK_DATE], $rs[T_LOCK_MAKE],
    			$rs[T_OPEN_DATE], $rs[T_OPEN_MAKE], $rs[T_ENUM], $rs[T_SURVEYID],
    			$rs[T_UNMODERATED], $rs[T_MODERATED_BY], $rs[T_MODERATED_DATE], 
    			$rs[T_HOLDED], $rs[T_HOLDED_BY], $rs[T_HOLDED_DATE], 
    			$rs[T_MOVED], $rs[T_MOVED_BY], $rs[T_MOVED_DATE], 
    			$rs[T_HIDDEN_BY], $rs[T_HIDDEN_DATE], 
    			$rs[T_DELETED_BY], $rs[T_DELETED_DATE], $rs[T_ARCHIVED], $rs[T_UNHIDDEN_BY], $rs[T_UNHIDDEN_DATE],
    			$rs[T_STICKY_BY], $rs[T_STICKY_DATE], $rs[T_UNSTICKY_BY], $rs[T_UNSTICKY_DATE]
    		);
    	}
    	if ($name == "CAT_ID"){$nom = 0;}
    	if ($name == "FORUM_ID"){$nom = 1;}
    	if ($name == "STATUS"){$nom = 2;}
    	if ($name == "SUBJECT"){$nom = 3;}
    	if ($name == "MESSAGE"){$nom = 4;}
    	if ($name == "REPLIES"){$nom = 5;}
    	if ($name == "COUNTS"){$nom = 6;}
    	if ($name == "AUTHOR"){$nom = 7;}
    	if ($name == "DATE"){$nom = 8;}
    	if ($name == "LAST_POST_AUTHOR"){$nom = 9;}
    	if ($name == "LAST_POST_DATE"){$nom = 10;}
    	if ($name == "ARCHIVE_FLAG"){$nom = 11;}
    	if ($name == "STICKY"){$nom = 12;}
    	if ($name == "HIDDEN"){$nom = 13;}
    	if ($name == "TOP"){$nom = 14;}
    	if ($name == "LINKFORUM"){$nom = 15;}
    	if ($name == "LASTEDIT_DATE"){$nom = 16;}
    	if ($name == "LASTEDIT_MAKE"){$nom = 17;}
    	if ($name == "LOCK_DATE"){$nom = 18;}
    	if ($name == "LOCK_MAKE"){$nom = 19;}
    	if ($name == "OPEN_DATE"){$nom = 20;}
    	if ($name == "OPEN_MAKE"){$nom = 21;}
    	if ($name == "ENUM"){$nom = 22;}
    	if ($name == "SURVEYID"){$nom = 23;}
    	if ($name == "UNMODERATED"){$nom = 24;}
    	if ($name == "MODERATED_BY"){$nom = 25;}
    	if ($name == "MODERATED_DATE"){$nom = 26;}
    	if ($name == "HOLDED"){$nom = 27;}
    	if ($name == "HOLDED_BY"){$nom = 28;}
    	if ($name == "HOLDED_DATE"){$nom = 29;}
    	if ($name == "MOVED"){$nom = 30;}
    	if ($name == "MOVED_BY"){$nom = 31;}
    	if ($name == "MOVED_DATE"){$nom = 32;}
    	if ($name == "HIDDEN_BY"){$nom = 33;}
    	if ($name == "HIDDEN_DATE"){$nom = 34;}
    	if ($name == "DELETED_BY"){$nom = 35;}
    	if ($name == "DELETED_DATE"){$nom = 36;}
    	if ($name == "ARCHIVED"){$nom = 37;}
    	if ($name == "UNHIDDEN_BY"){$nom = 38;}
    	if ($name == "UNHIDDEN_DATE"){$nom = 39;}
    	if ($name == "STICKY_BY"){$nom = 40;}
    	if ($name == "STICKY_DATE"){$nom = 41;}
    	if ($name == "UNSTICKY_BY"){$nom = 40;}
    	if ($name == "UNSTICKY_DATE"){$nom = 41;}
     
    	return($topics[$nom]);
    }
    je dois selectionner tous les champs de la table TOPICs donc select * est raisonnable
    merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Meme si ce n'est pas ça qui va doubler la vitesse utilise if/elseif ou switch{} pour tes conditions ; cette suite de if est vraiment une mocheté.

    Pourquoi créés-tu un gros tableau pour au final ne retourner qu'un seul élément ?
    D'ailleurs a quoi sert cette fonction ? tu dis avoir besoin de tous les champs mais si j'ai les yeux en face des trous, tu n'en utilises qu'un seul.

    La requête en elle même ne doit prendre que quelques millisecondes. Est-ce que tu ne la repeterais pas des centaines de fois ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 112
    Par défaut
    Creer un gros tableau pour en retourner une seule valeur

    Au fait c'est sur ce tableau qu'agissent les conditions (la moche suite de if que je viens de transformer en switch :p)

    cette fonction aide a lister les topic d'un certain forum

    sinon une suggestion ?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Pourquoi la fonction ne retourne qu'un seul champ ?
    Tu appelles la fonction et donc interroge la base pour lire chacune des x valeurs dont tu as besoin ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 112
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Pourquoi la fonction ne retourne qu'un seul champ ?
    ?
    en effet c'est ça mon probleme
    à chaque $nom la requête se refait c'est pour ça je demande une possibilité d'optimisation
    la fonction je l'appele dans un autre fichier quand j'ai besoin par exemple d'afficher le titre du topic je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $subject = topics("SUBJECT", $t);
    vous me saisissez mantenant ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Récupère tous les champs d'un coup.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 112
    Par défaut
    vous voulez dire quoi ?
    je vous ai pas compris :s

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Actuellement tu lances une requête chaque fois que tu as besoin d'une donnée.
    Je te propose de recuperer toutes les données d'un topic d'un coup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function topics($id){
    	$result = mysql_query("SELECT * FROM ".prefix."TOPICS WHERE TOPIC_ID = ".intval($id));
           $row = mysql_fetch_assoc($result);
           return $row;
    }
     
    $infotopic = topics(6);
     
    echo 'date du message : ' . $infotopic['T_DATE'];
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 112
    Par défaut
    Bonne idée , Merci beaucoup Sabotage ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Comment optimiser cette requête ?
    Par AyManoVic dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 03/08/2010, 00h44
  2. Comment optimiser cette requête?
    Par Nympheasi dans le forum Requêtes
    Réponses: 10
    Dernier message: 05/10/2009, 03h51
  3. Est-il possible d'optimiser cette requête ?
    Par kraiggy dans le forum Développement
    Réponses: 6
    Dernier message: 20/03/2009, 15h49
  4. Est-il possible d'optimiser cette requête ?
    Par Katachana dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/06/2008, 14h50
  5. comme optimiser cette requête sur 12.000 enr.
    Par chapeau_melon dans le forum WinDev
    Réponses: 2
    Dernier message: 22/03/2008, 19h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo