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

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?

Rechercher et remplacer du texte dans une table MySQL

vendredi 1 juillet 2011

Bonjour à tous,

Lors du développement d’une application en ligne, nous sommes parfois amenés à faire machine arrière et à modifier des choses aussi simples que des noms de variables.
Dans nos scripts, c’est une chose assez aisée à faire puisque presque tous les éditeurs de codes permettent le « Search and replace », généralement via la même commande: CTRL + H.

Mais si l’on désire modifier une variable ou un texte dans une série d’entrées MySQL, c’est directement moins évident…
Du moins, c’est ce que je pensais au départ, me voyant déjà exporter les données, lancer le remplacement et réintégrer les données, mais finalement une petite recherche google anglophone plus tard, j’ai trouvé ceci:

  1. span class= »st0″>'[string_to_find]’,‘[string_to_replace]’);

Plus facile, non?