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 :

Relancer une requête SQL plusieurs fois


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 32
    Par défaut Relancer une requête SQL plusieurs fois
    Bonjour à tous,

    J'ai un problème d'optimisation pour lancer plusieurs fois la même requête SQL qui génère un RANDOM sur ma table. En effet, je relance 5 fois ma requête SQL mais mon code actuel est vraiment pas optimisé, pouvez-vous m'aider ?
    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
    <?php
    $marequete = mysql_query("SELECT `ma_table_id` FROM `ma_table` JOIN (SELECT FLOOR(COUNT(*) * RAND()) AS ValeurAleatoire FROM `ma_table`) AS V ON `ma_table`.`ma_table_id` = V.ValeurAleatoire");
    $resultat = mysql_fetch_array($marequete);
    $id .= $resultat['ma_table_id'].' ';
    echo $id;
    $marequete = mysql_query("SELECT `ma_table_id` FROM `ma_table` JOIN (SELECT FLOOR(COUNT(*) * RAND()) AS ValeurAleatoire FROM `ma_table`) AS V ON `ma_table`.`ma_table_id` = V.ValeurAleatoire");
    $resultat = mysql_fetch_array($marequete);
    $id .= $resultat['ma_table_id'].' ';
    echo $id;
    $marequete = mysql_query("SELECT `ma_table_id` FROM `ma_table` JOIN (SELECT FLOOR(COUNT(*) * RAND()) AS ValeurAleatoire FROM `ma_table`) AS V ON `ma_table`.`ma_table_id` = V.ValeurAleatoire");
    $resultat = mysql_fetch_array($marequete);
    $id .= $resultat['ma_table_id'].' ';
    echo $id;
    $marequete = mysql_query("SELECT `ma_table_id` FROM `ma_table` JOIN (SELECT FLOOR(COUNT(*) * RAND()) AS ValeurAleatoire FROM `ma_table`) AS V ON `ma_table`.`ma_table_id` = V.ValeurAleatoire");
    $resultat = mysql_fetch_array($marequete);
    $id .= $resultat['ma_table_id'].' ';
    echo $id;
    $marequete = mysql_query("SELECT `ma_table_id` FROM `ma_table` JOIN (SELECT FLOOR(COUNT(*) * RAND()) AS ValeurAleatoire FROM `ma_table`) AS V ON `ma_table`.`ma_table_id` = V.ValeurAleatoire");
    $resultat = mysql_fetch_array($marequete);
    $id .= $resultat['ma_table_id'].' ';
    echo $id;
    ?>
    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    C'est quoi le but de l'opération ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 32
    Par défaut
    Bonjour Séb, le but et d'améliorer la vitesse de chargement de la page qui prend pas mal de temps. Merci d'avance

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Je voulais dire : pourquoi ces 5 requêtes ? A quoi servent-elles ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 32
    Par défaut
    Pour afficher 5 films au hasard, c une mini appli intranet que je fais pour ma Médiathèque.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    et en 1 seule requête ?
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT `ma_table_id` FROM `ma_table` ORDER BY RAND() LIMIT 0, 5
    Dernière modification par Bovino ; 17/06/2013 à 08h13.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 32
    Par défaut
    Bonjour jreaux62,

    Pour le random je me suis basé sur ce très bon article d'optimisation SQL : http://blog.neamar.fr/accueil/4-web-...d-mysql-rapide

  8. #8
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Bonjour,

    autre chose aussi:

    Ne plus utiliser:

    MAIS


  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 32
    Par défaut
    Bon andaman, j'ai remplacé mysql_query par mysqli_query et depuis le code ne marche plus. As-tu une idée pour l'amélioration du code pour exécuter plusieurs fois mon random ?

    Merci d'avance

  10. #10
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    mysqli est une avancée de mysql.

    MYSQL est une extension qui est obsolète depuis PHP 5.5.0, et sera supprimée dans le futur. À la place, les extensions MySQLi ou PDO_MySQL doivent être utilisées. Voir aussi le guide MySQL : choix de l'API ainsi que la FAQ associée pour plus d'information. Voici les alternatives à cette fonction :
    regarde ta connexion vers la base de données. pour que mysqli fonctionne fais une conexion comme ceci:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $base = new mysqli('127.0.0.1', 'user', 'password','ta-base');
    $base -> set_charset('utf8');
    if(mysqli_connect_errno()){
        printf("Échec de la connexion : %s\n", mysqli_connect_error());
        exit();
    }

    Le code çi-dessous te permettra de ne pas avoir de souci d'accent dans tes pages (losanges avec point d'interrogation ).
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $base -> set_charset('utf8');

    Pour plus d'infos:

    http://www.php.net/manual/fr/mysqli....statements.php

    Pour ton random, jreaux62 t'a mâché la requête.

    Si tu veux un plus simple encore:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "SELECT `ma_table_id` FROM `ma_table` ORDER BY RAND() LIMIT 5"

    Pour utiliser plusieurs fois le résultat d'une même requête, regardes vers :

    Pour les multiples requêtes:

    http://au1.php.net/manual/fr/mysqli....-statement.php

    Fais aussi un echo de tes requêtes. Tu vas gagner du temps

    je pense t'avoir donner ts les éléments pour te faire avancer.
    Si tu as d'autres souci, postes un peu + de code, cela sera + simple pour ceux qui t'aident.

    A+

Discussions similaires

  1. Une requête parsée plusieurs fois
    Par devra dans le forum Administration
    Réponses: 16
    Dernier message: 23/11/2012, 16h51
  2. Exécuter une requête SQL lourde en plusieurs fois
    Par diabli73 dans le forum Général Java
    Réponses: 5
    Dernier message: 10/06/2010, 18h13
  3. [SQL] Une requête dans plusieurs tables
    Par Anduriel dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/12/2005, 16h23
  4. Plusieurs jointures dans une requête sql
    Par Pero dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/09/2005, 20h59
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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