Posts tagged MySQL
Requête en ligne de commande
4/03/09
Ayant l’habitude d’effectuer pas mal de chose en ligne de commande, le requêtage direct dans une console peut être très pratique. Certains on l’habitude de faire quelque chose du style:
mysql -h$db_host -u$db_username -p$db_password -D$db < fichier.sql
Mais l’ajout du -e peut être très pratique et permet d’exécuter une requête directement (pratique pour des scripts automatiques).
mysql -h$db_host -u$db_username -p$db_password -D$db -e"SELECT * FROM ma_table;"
Caster un type BLOB ou autre en CHAR
24/02/09
Typo3 stocke certains champs important avec le type BLOB. Il peut parfois être intéressant d’en voir le contenu, puisque par défaut, si vous essayez d’afficher un BLOB sous phpmyadmin, vous n’aurez rien. Il m’est arrivé d’avoir dans une extension un chemin vers un fichier dans un type BLOB et je voulais consulter ces chemins en ligne de commande avec MySQL. Pour cela, vous pouvez donc caster votre BLOB en char et cela se fait très facilement, de la manière suivante :
SELECT CAST( mon_champ_blob AS CHAR( 100000 ) ) FROM ma_table
Rechercher dans une liste à virgules (BLOB)
21/02/09
En MySQL ou en typo3 plus particulièrement, on retrouve souvent des champs de tables MySQL qui contiennent des valeurs séparées par des virgules.
Par exemple, dans la table « fe_users », on décrit les groupes d’un utilisateur en listant les IDs des groupes. On peut alors avoir des valeurs du style « 3,39,189″. Comment savoir si cet utilisateur fait partie du groupe d’ID 189 ? Il y a en gros 3 manières distincte de fonctionner :
- Utiliser une expression régulière avec un WHERE usergroup REGEXP ‘,?xx,?’. Une solution assez médiocre ou alors il faut se munir d’un pattern qui couvre tous les cas possibles.
- Utiliser un IN comme cela : SELECT * FROM fe_users WHERE usergroup IN (189). Cela peut être une solution envisageable mais parfois on a un comportement bizarre. Voir ce billet pour une démonstration.
- Utiliser une la fonction MySQL FIND_IN_SET qui répond à notre problématique et qui est de plus optimisée pour cela. Elle s’utilise de la manière suivante : SELECT * FROM fe_users WHERE FIND_IN_SET(’189′,usergeoup)
