Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/03/2011, 11h51   #1
Membre expérimenté
 
Inscription : janvier 2007
Messages : 608
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 608
Points : 539
Points : 539
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 :
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?
kabkab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 12h17   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 014
Points : 5 014
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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 13h35   #3
Membre expérimenté
 
Inscription : janvier 2007
Messages : 608
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 608
Points : 539
Points : 539
Bonjour,

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

Code php :
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...
kabkab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 13h57   #4
Invité de passage
 
Inscription : mars 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 6
Points : 1
Points : 1
Salut

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

Code :
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
menthe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 14h09   #5
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 014
Points : 5 014
Pour améliorer les performances utilise mysqli (ou PDO) et les requêtes préparées.

Citation:
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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 17h35   #6
Membre expérimenté
 
Inscription : janvier 2007
Messages : 608
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 608
Points : 539
Points : 539
Bonjour,
Finalement j'ai trouvé ce post http://www.developpez.net/forums/d44...s/#post2667085
qui m'a bien aidé

Merci
kabkab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 17h46   #7
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 014
Points : 5 014
Ok, même combat, autre langage.

L'essentiel c'est que ça tourne :p
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h49.


 
 
 
 
Partenaires

Hébergement Web