![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
![]() |
|
|
Outils de la discussion |
|
|
#16 (permalink) | |
![]() Date d'inscription: mars 2003
Messages: 793
|
J'ai été récemment confronté au douleureux probleme de perte du mot de passe ROOT !!
Voici le moyen de changer un mot de passe ROOT perdu: Citation:
|
|
|
|
|
|
|
#17 (permalink) |
![]() Date d'inscription: février 2005
Localisation: Paris
Messages: 1 974
|
L'utilisation d'un limit sur une ou des tables ayant beaucoup d'enregistrements peut énormement plomber le serveur. Surtout si vous retourner des gros contenu avec beaucoup sur des petites intervale de page. Par exemple un forum qui retourne 30 enregistrements et le pire c'est l'ajout de l'ORDER BY qui ici achève le CPU mais qui est quasi obligatoire.
Pour optimiser les performances il faut deux requêtes. La première requête utilise le LIMIT mais ne retourne que les index. Code :
SELECT idtopic FROM forum ORDER BY date LIMIT 100,130; Dans la second requête vous utilisez la fonction IN(...). IN permet d'insérer un suite de valeur que vous souhaiter retourner. Code :
SELECT * FROM forum WHERE idtopic IN(100,101,102,103,...); Avec cette méthode c'est totalement liquide.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !... |
|
|
|
|
|
#18 (permalink) |
![]() Date d'inscription: mai 2002
Localisation: Nancy
Âge: 32
Messages: 964
|
Excellente méthode berceker united !
Je viens de tester sur une base de données médiocrement modélisée et cela me donne de bons résultats. Par contre, sur une base correctement modélisé (taille d'enregistrement fixe, index ordonné), le gain est nul. Néanmoins, je changerais les valeurs de votre second exemple. Certains débutants pourrait faussement comprendre qu'il faut remplacer Code :
SELECT * FROM forum LIMIT 100,30 Code :
SELECT * FROM forum WHERE id_topic IN (100, 101, 102, 103...., 128, 129, 130) Donc je conseillerais ces exemples : Code :
SELECT idtopic FROM forum LIMIT 100,30 Code :
SELECT * FROM forum WHERE idtopic IN(100,106,108,110,...,166,170);
__________________
Alexandre T. PHP5/MySQL5 Codes prêts à l'emploi 30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc... Mes articles |
|
|
|
|
|
#19 (permalink) |
![]() Date d'inscription: mai 2002
Localisation: Nancy
Âge: 32
Messages: 964
|
big_ben3333, je ne pense pas que votre solution soit apportée à la FAQ. En effet, elle résulte plus à mon sens d'une réflexion pour contourner des problèmes créés par une base très mal modélisé.
Il existe des bases mal modélisé, et certaines astuces sont utiles, mais votre cas est assez particulier. De plus on peut planter votre méthode dans le cas d'utilisateurs réalisant des opérations simultanément ce qui est fréquent sur le web ! Exemple Code :
12h00m44secondes 034ms - utilisateur 1 insère le livre 1 12h10m44secondes 080ms - utilisateur 1 insère le livre 2 12h15m14secondes 034ms - utilisateur 2 insère le livre 3 12h15m44secondes 041ms - utilisateur 1 insère le livre 4 Si l'utilisateur 1 à inséré son livre 4 pendant cet intervalle de 45 millisecondes, votre algorithme retourne 4 et non 3 ! Et la méthode avec LAST_INSERT_ID, elle, permet d'éviter les accès concurrents. Néanmoins, je vous remercie de votre aide et n'hésitez SURTOUT pas à nous conseiller d'autres questions-réponses
__________________
Alexandre T. PHP5/MySQL5 Codes prêts à l'emploi 30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc... Mes articles |
|
|
|
|
|
#20 (permalink) | |
![]() Date d'inscription: février 2005
Localisation: Paris
Messages: 1 974
|
Citation:
Il faut pas utiliser cette methode à toute les sauces.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !... |
|
|
|
|
|
|
#21 (permalink) |
|
Membre éprouvé
![]() |
Je propose quelque chose pour la communauté :
La liste des pays francais/anglais avec les codes avec insertion dans MYSQL. Télécharger le fichier, plus d'infos sur le site |
|
|
|
|
|
#22 (permalink) |
![]() Date d'inscription: février 2005
Localisation: Paris
Messages: 1 974
|
Voici une fonction qui permet de mettre le premier caractère en majuscule. Mysql5
Code :
CREATE FUNCTION `ucfirst`(p_str VARCHAR(255)) RETURNS varchar(255) NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN DECLARE strOut VARCHAR(255); SET strOut = TRIM(p_str); SET strOut = CONCAT(UPPER(LEFT(strOut,1)), RIGHT(strOut,CHARACTER_LENGTH(strOut)-1)); RETURN strOut; END; Code :
CREATE FUNCTION `UUIDII`() RETURNS char(36) DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN DECLARE hashe1 VARCHAR(8); DECLARE hashe2 CHAR(4); DECLARE hashe3 CHAR(4); DECLARE hashe4 CHAR(4); DECLARE hashe5 CHAR(12); DECLARE hasheRef CHAR(36); SET hashe1 = SUBSTRING(MD5(RAND()),25); SET hashe2 = SUBSTRING(MD5(RAND()),29); SET hashe3 = SUBSTRING(MD5(RAND()),29); SET hashe4 = SUBSTRING(MD5(RAND()),29); SET hashe5 = SUBSTRING(MD5(RAND()),21); SET hasheRef = CONCAT_WS('-', hashe1, hashe2, hashe3, hashe4, hashe5); RETURN hasheRef; END;
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !... Dernière modification par berceker united ; 07/09/2007 à 23h53 Motif: Remplacement de LENGTH et par CHARACTER_LENGTH |
|
|
|
|
|
#23 (permalink) | |
![]() Date d'inscription: mai 2002
Localisation: Nancy
Âge: 32
Messages: 964
|
Citation:
__________________
Alexandre T. PHP5/MySQL5 Codes prêts à l'emploi 30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc... Mes articles |
|
|
|
|
|
|
#24 (permalink) | |
![]() Date d'inscription: mai 2002
Localisation: Nancy
Âge: 32
Messages: 964
|
Citation:
Juste une question : Quelle est cette raison ? On pourrait peut-être la commenter ainsi.
__________________
Alexandre T. PHP5/MySQL5 Codes prêts à l'emploi 30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc... Mes articles |
|
|
|
|
|
|
#25 (permalink) | |
![]() Date d'inscription: février 2005
Localisation: Paris
Messages: 1 974
|
Citation:
le UUID peut fausser l'information et ne montre aucune hiérarchie ni un sens logic à un paramètre. Apparement il se base sur des identifiant reseau. Ce qui affiche un peut pret toujours les mêmes données (12 premiers caractères) mais sans qu'elle puisse être identique. Je voulais rendre l'information plus flou. J'ai donc fait un UUID() à ma sauce. J'ai une table qui possède tous les id utilisés afin qu'il ne puisse en créer un indentique. Toute les tables qui doivent communiquer avec l'extérieur doivent passer par cette table "Table InOut". Pour des raisons de développment et de maintenance chaque enregistrement de cette table (InOut) possède le nom de la table et id qui l'utilise. Ainsi je peux savoir qui utilise cette uuid.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !... |
|
|
|
|
|
|
#26 (permalink) |
|
Membre émérite
![]() Date d'inscription: janvier 2006
Messages: 727
|
Petite proposition : comment désactiver la commande (destructrice) DROP DATABASE avec PhpMyAdmin :
http://www.developpez.net/forums/sho...d.php?t=403838 |
|
|
|
|
|
#27 (permalink) |
![]() Date d'inscription: février 2005
Localisation: Paris
Messages: 1 974
|
Voici une fonction permettant de faire une split d'une chaine. Celui-ci retourne un tableau. En fait, ce n'est pas une fonction mais une procédure stocké. La raison est qu'une fonction n'accepte pas des chaines de caractère avec des accents.
Code :
CREATE PROCEDURE `Split`(IN p_str TEXT, IN p_delimiter CHAR(1)) DETERMINISTIC CONTAINS SQL SQL SECURITY INVOKER COMMENT '' BEGIN DECLARE Pos INTEGER(11); DECLARE sub_Str TEXT; SET Pos = 1; SET sub_Str = ''; BEGIN CREATE TEMPORARY TABLE IF NOT EXISTS t_split( `idItem` INTEGER(11) UNSIGNED NOT NULL AUTO_INCREMENT, `Item` TEXT, PRIMARY KEY (`idItem`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT = 'Tempory table'; END; TRUNCATE t_split; COMMIT; WHILE Pos <= LENGTH(p_str) DO BEGIN IF SUBSTRING(p_str, Pos, 1) <> p_delimiter THEN SET sub_Str = CONCAT(sub_Str, SUBSTRING(p_str, Pos, 1)); ELSE INSERT INTO t_split (Item) VALUES(sub_Str); SET sub_Str = ''; END IF; IF LENGTH(p_str) = Pos THEN INSERT INTO t_split (Item) VALUES(sub_Str); END IF; SET Pos = (Pos + 1); END; END WHILE; SELECT * FROM t_split; END; CALL Split('titi|tata|tutu','|'); SELECT * FROM t_split; Si vous executez la procédure il vous retourne une table avec deux champs IdItem et Item. De là, vous pouvez encore récupérer le resultat en faisant select * from t_split pour travailler dessus.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !... |
|
|
|
|
|
#29 (permalink) |
![]() Date d'inscription: février 2005
Localisation: Paris
Messages: 1 974
|
Je rajouterais même MyODBC
Le driver odbc pour Mysql
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !... |
|
|
|
|
|
#30 (permalink) |
|
Membre éprouvé
![]() Date d'inscription: janvier 2003
Localisation: A la campagne
Messages: 425
|
Bonjour,
je ne sais pas trop si cette question est déjà posée dans la FAQ, en tout cas j'ai rencontré le problème ce matin à savoir calculer l'âge d'un individu en fonction de sa date de naissance au format date %d/%m/%Y et je propose cette solution : Code :
SELECT YEAR(NOW()) - YEAR(DATE_NAISSANCE) + IF(DATEDIFF( STR_TO_DATE(CONCAT('0001', DATE_FORMAT(NOW(), '%d%m')), '%Y%d%m'), STR_TO_DATE(CONCAT('0001', DATE_FORMAT(DATE_NAISSANCE, '%d%m')), '%Y%d%m') ) < 0, -1, 0) FROM DUAL
__________________
"Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant." Dernière modification par nounetmasque ; 13/03/2008 à 11h40 |
|
|
|
|
![]() |
![]() |
||
La FAQ MySQL - commentaires & suggestions
|
||
| Outils de la discussion | |
|
|