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:
-
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.
Tags: insert, MySQL, subquery
Publié dans Astuces, MySQL |
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:
-
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.
-
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?
Publié dans MySQL |