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 :

Updater un compteur ? [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Homme Profil pro
    Touche à tout informatique autodidacte
    Inscrit en
    Janvier 2007
    Messages
    811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Touche à tout informatique autodidacte

    Informations forums :
    Inscription : Janvier 2007
    Messages : 811
    Par défaut Updater un compteur ?
    Bonjour,
    Sur ma table, j'ai plusieurs champs. Les plus importants, en ce qui me concerne, sont un champ nommé created en type DATETIME et un autre ordered en type INT(11). Je souhaiterais faire un UPDATE sur ordered de façon à ce qu'il soit une sorte de compteur que je pourrais appeler ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `ma_table` ORDER BY `ordered` ASC
    Pour l'instant et comme ma table contient plus de 90.000 enregistrements je ne me vois pas faire un script PHP parcourant ma_table avec comme tri sur created et updatant le champ ordered pour chaque enregistrement.

    Donc, y-a-t-il une requête MySQL me permettant d'effectuer cela en un seul coup?

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Une requête non mais une procédure oui.

    Fais-toi ton script PHP, tu galèrera moins. 90000 enregistrement c'est rien du tout, ça sera fait en moins d'une minute.

  3. #3
    Membre émérite
    Homme Profil pro
    Touche à tout informatique autodidacte
    Inscrit en
    Janvier 2007
    Messages
    811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Touche à tout informatique autodidacte

    Informations forums :
    Inscription : Janvier 2007
    Messages : 811
    Par défaut
    Bonjour,

    Le script PHP auquel j'ai pensé (je ne l'ai pas testé) aura l'air de :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $opened=mysql_connect($mysqlhost, $mysqluser, $mysqlpass); 
    if (!$opened) Die (mysql_error());
     
    $query = 'SELECT `created`, `ordered` FROM `ma_table` WHERE 1 ORDER BY `created` ASC';
    $res = mysql_query($query,$opened);
     
    $cpt = 1;
    while(list($created, $ordered)=mysql_fetch_row($res)): 
    	$query = 'UPDATE `ma_table` SET `ordered`=\''.$cpt.'\'';
    	$result = mysql_query($query,$opened);
    	$cpt++;
    endwhile;

    D'office, je pense que lancer ce script aura un effet néfaste sur les ressources du serveur. Déjà que des scripts similaire juste pour 1500 enregistrements amènent mon Server Load à des pics...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Par défaut
    Salut

    Pour limiter la charge de ton serveur tu peux passer une requête de ce genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    while ( ta condition d'arrêt )
    {
         // On spécifie un LIMIT pour éviter de bloquer trop longtemps la table (surtout si le moteur que tu utilises est MyISAM), de plus ça fera les changements par blocks de 10 000 enregistrements
         mysql_query( 'UPDATE `ma_table` SET `ordered`= "$cpt" LIMIT 10000');
    
         $cpt++;
    
         // Hop là petite pause pour éviter le dépassement du temps d'exécution de script spécifié dans le php.ini si vraiment la requête te semble très lourde
         usleep(50000);
    }
    ?>
    bon j'ai pas spécialement testé le script car je ne possède pas de table qui soit suffisamment peuplée pour le tester mais je pense que ça suffira à t'exposer le principe, si besoin demande et je me débrouillerais pour pondre un truc testé et utilisable

  5. #5
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Pour améliorer les performances utilise mysqli (ou PDO) et les requêtes préparées.

    D'office, je pense que lancer ce script aura un effet néfaste sur les ressources du serveur. Déjà que des scripts similaire juste pour 1500 enregistrements amènent mon Server Load à des pics...
    De toute façon si tu fais une requête de la mort ce sera pareil voire pire.

  6. #6
    Membre émérite
    Homme Profil pro
    Touche à tout informatique autodidacte
    Inscrit en
    Janvier 2007
    Messages
    811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Touche à tout informatique autodidacte

    Informations forums :
    Inscription : Janvier 2007
    Messages : 811
    Par défaut
    Bonjour,
    Finalement j'ai trouvé ce post http://www.developpez.net/forums/d44...s/#post2667085
    qui m'a bien aidé

    Merci

  7. #7
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Ok, même combat, autre langage.

    L'essentiel c'est que ça tourne :p

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

Discussions similaires

  1. [MySQL] compteur avec update
    Par devhafid dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/08/2013, 12h32
  2. Compteur de vues, INSERT & UPDATE
    Par timathias dans le forum Requêtes
    Réponses: 1
    Dernier message: 13/09/2008, 15h50
  3. update + incrémenter compteur
    Par elkhanssaa dans le forum Développement
    Réponses: 3
    Dernier message: 09/05/2008, 11h23
  4. Réponses: 9
    Dernier message: 20/09/2006, 15h58
  5. update et virgule
    Par Delph dans le forum Bases de données
    Réponses: 8
    Dernier message: 27/08/2002, 14h40

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