Archive(s) pour la catégorie ‘PHP’

Les expressions régulières en MySQL

samedi 18 août 2012

Et oui, vous avez bien lu! Les expressions régulières ne sont pas que dans le PHP, et le réécriture d’URL à la volée (via nos précieux .htaccess)/

Ce n’est pas quelque chose que j’ai coutume de faire mais parfois, lors de migrations de données, on souhaite filtrer plus précisément les données à traiter.

Par exemple, sélectionner les entrées dont la référence commence par 3 lettres:

  1. span class= »st0″>’^([A-Z]{3})’

Ou fini par 1 chiffre et un code à 2 lettres précis:

  1. span class= »st0″>'([1-9]{1})(GF|MF)$’

Pour ceux qui sont frileux avec les expressions régulières, je vous conseille ce très bon site francophone sur le sujet: http://www.expreg.com/mysql.php

Insérer des entrées provenant d’une sous-requête MySQL

mardi 10 juillet 2012

Dans une phase de développement d’un outil, nous pouvons être amenés à copier des données d’une table de notre base de données à une autre pour mieux scindez nos données ou au contraire les regrouper.
Dans ce cas, notre cerveau, formaté à réfléchir en PHP pour intéragir avec MySQL, va nous pousser à écrire quelques lignes pour:

  • récupérer les données à traiter (1 requête),
  • puis, pour chacune de ces données, les insérer dans le nouvelle table (n requêtes)

Pour un déménagement de n entrées, on aura donc n+1 requêtes MySQL à lancer.

Que diriez-vous de n’en lancer qu’une seule et, cerise sur la gâteau, de ne pas avoir à coder une seule ligne PHP?

Jugez plutôt:

  1. span class= »st0″>’blabla’)

Rien ne vous empêche évidemment d’avoir une sous-requête peu plus complexe qui prend les entrées avec l’id le plus bas parmi les doublons d’une série répondant à une certaine conditions pour insérer dans une table avec ‘valeur_commune’ à toutes les nouvelles entrées et en y indiquant le timestamp Unix actuel.

  1. span class= »st0″>’valeur_commune’‘remplie’

Merci à Rob Searles pour son article qui m’a fait découvrir cette « technique »

Lister n-tuples d’une base de donnée en une requête

dimanche 11 mars 2012

Dans une table d’utilisateurs, on peut aisément lister les utilisateurs distincts en les groupant par exemple par email tout en comptant le nombre d’apparition de ceux-ci comme ceci:

  1. span class= »st0″>’n’

Mais cette méthode ne permettant pas de sélectionner ceux qui apparaissent 2 fois ou plus tout simplement parce que l’on ne peut pas ajouter simplement « WHERE `n` > 1 » comme on aimerait le faire intuitivement.
Pourquoi? Voir la documentation.

On pourra cependant compter sur la clause HAVING.

  1. span class= »st0″>’n’

Dans cette requête j’ai également demandé à sélectionner uniquement les plus vieilles entrées (avec l’ID le plus bas) dans le but par exemple de les supprimer?