SEO, BASH, PHP et plus si affinités

Astuces MySQL

8 Mysql Tips

Ajourd’hui on ne parle pas de SEO mais de MySQL et plus particulièrement de quelques commandes/requêtes utiles. Je ne suis pas là pour vous présenter MySQL ou pour en faire la promotion, si vous atterissez sur cette page, c’est que vous l’utilisez déjà.

Afin d’établir une compréhension maximale, voici quelques conventions que je vais utiliser au cours de cet article :

  • table désignera le nom de votre table
  • field désignera le nom du champ
  • id désignera un identifiant (unique ou non, auto-increment ou non, ceci sera spécifié dans l’exemple cité)

Voici donc une liste de 8 astuces pour commencer :

Requêtes

Afficher les doublons

Dans cet exemple, field désignera le champ sur lequel on effectue la recherche de doublons :

SELECT * FROM `table` GROUP BY (`field`) HAVING COUNT(*) > 1;

Remplacer la valeur d’un champ

Vous souhaitez remplacer toutes les valeurs (dans cet exemple nous prendrons ‘toto’) de votre champs (field) par une nouvelle valeur (prenons ‘titi’).

UPDATE `table` SET `field`=REPLACE(`field`, 'toto', 'titi');

Peut être intéressant par exemple pour remplacer des ‘\n’ par des ‘br’.

Effectuer un SELECT sur plusieurs ID

Le champ contenant les ID s’appelle field et on souhaite récupérer les infos uniquement pour les ID 1,2,5 et 23.

SELECT * FROM `table` WHERE `field` IN (1, 2, 5, 23);

Utiliser les expressions régulières (REGEX)

Peu utilisé car gourmand en ressources, l’utilisation des expressions régulières en mysql se révèle parfois indispensable.
Imaginons le cas suivant :
Vous avez une table stockant des mails envoyés à des clients. Afin d’économiser de la place sur votre serveur vous avez choisi d’insérer une seule ligne par envoi de mail en séparant les ID des clients à qui le mail est parti dans un seul champ (ce n’est peut être pas très clair, mais ça le deviendra avec l’exemple). Pour l’exemple le séparateur d’ID sera le tiret. Je sais que ce n’est pas la meilleur méthode, mais nous ne sommes pas là pour parler performances (sinon on ne parlerai pas de MySQL ;)).
Pour cet exemple, nous allons donc extraire les mails envoyés au client ayant l’ID 23 entre le 02 aout 2010 et le 15 aout 2010 et les trier par date d’envoi. Les dates sont au format DATETIME et les IDS des clients séparés par des tirets sont stockés dans le champs ID.

SELECT * FROM `table` WHERE `date_mail` BETWEEN '2010-08-02%' AND '2010-08-05%' AND ID REGEXP '(^|-)23(-|$)' ORDER BY `date_mail`;

Petite explication :
Dans le cas ou le séparateur est un tiret ‘-‘, on a 3 possibilité pour trouver le chiffre 23.
Au début de la chaine (d’ou le ^)
En fin de chaine (d’ou le ‘$’)
ou entre 2 tirets (d’ou les ‘-‘)
Le pipe ‘|’ signifie ou (ca c’est pour ceux qui ne le savaient pas).

Ajouter un champ auto-increment sur une table déjà peuplée

Vous venez de vous rendre compte que vous aviez besoin d’un champ en auto-increment (ID_ai pour ID auto increment) mais votre table est déjà bien remplie !!!! Pas de problème, cette simple requête fera l’affaire

ALTER TABLE `table` ADD `ID_ai` INT NOT NULL AUTO_INCREMENT PRIMARY KEY;

Re-indexer un auto-increment

Si vous souhaitez que votre auto-increment débute à 6

ALTER TABLE `table` AUTO_INCREMENT = 6;

Maintenance, console

Pour les exemples suivants, les résultats de requêtes seront volumineux, c’est pour cette raison que nous utiliserons le mode console.
Nous allons incorporer également les conventions suivantes :

  • user : le nom d’utilisateur de votre BDD
  • password : le mot de passe de l’utilisateur
  • database : la base de données sur laquelle on effectue la requête
  • localhost : le serveur ou se trouve votre BDD
  • output.sql : le fichier de sortie

Exporter le résultat d’une requête dans un fichier

L’exemple parle de lui meme, donc no comment.

rdd@rddbox:$
mysql -uuser -ppassword -hlocalhost -D database -e "select * from table where id>5000" > output.sql;

Exporter le résultat d’une requête avec un ORDER BY

rdd@rddbox:$
mysql -e 'SELECT * FROM table ORDER BY `field`' -N -uuser -ppassword -hlocalhost database > output.sql

5 Réponses to “Astuces MySQL”

  1. PSP dit :

    Vraiment sympa ces astuces, moi qui chercher quelques bouts de code de ce genre de temps en temps, je sais où aller voir dorénavant 😉

  2. Un bon récapitulatif des principales fonctions SQL. Je ne connaissais pas la fonction REPLACE, merci ! J’ai toujours procédé avec un WHERE classique.

  3. Evoclicks dit :

    Un bon rappel des fonctions SQL, Merci, A bientot

  4. yemtsi dit :

    Merci pour : Ajouter un champ auto-increment sur une table déjà peuplée 🙂

  5. Xanou dit :

    Salut,

    Dites, est-il possible de rechercher les doublons du genre :
    – sainte marie
    – sainte-marie

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Je suis un gros footer de merde !! - Powered by le Presse mot