Mysql + export + csv + groupy en gardant les colonnes groupées

Petit tips avec MySQL. Admettons que vous voulez faire un export en csv d’une table (A). Dans ce cas, c’est facile, il suffit d’utiliser « INTO OUTFILE ». Par contre, si vous avez une jointure (A -> B), c’est plus compliqué.

Il y a plusieurs solutions : soit on se retrouve avec plusieurs ligne de la table A en double, puis à « droite » de ces lignes , les colonnes de la table B.

Soit on utilise la fonction group_concat; et un petit hack ;)

Exemple :

SELECT c.id, c.first_name, c.last_name,  GROUP_CONCAT(CONCAT(p.bar_code,'||',p.quantity,'||',p.date) SEPARATOR "||")
FROM contact c
LEFT JOIN product p on (c.id = p.contact_id)
GROUP BY c.id
INTO OUTFILE '/tmp/export.csv' FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"';

On fait notre jointure normalement, on group by sur c.id, et c’est dans le select qu’il y a une peu de magie. On va d’abord concaténer les attributs de la table « product » avec comme séparateur deux pipes « || ». Et ensuite, on va concaténer toutes les valeurs résultantes de la fonction GROUP BY.

Enfin, il va falloir remplacer tous nos doubles pipes par « ; » qui correspond a nos délimiteurs de champs.

sed -i 's/||/";"/g' /tmp/export.csv

Et voila, vous avec un beau fichier CSV bien formaté ;) Ici le hack c’est de remplacer un délimiteur un peu spécial « || » par un vrai délimiteur, a posteriori.

P.S. : Il se peut que mysql exporte le fichier csv avec l’utilisateur mysql. Vous n’aurez donc pas les droits pour le lire et/ou le modifier. Il faut donc passer en root ;).

Silex Kitchen Edition

Silex est un micro-framework (en php) basé sur les composants de symfony2. Je vous invite à aller voir la documentation. La documentation est déjà bien fournie, cependant vous pouvez aller voir la présentation d’Igor au sfDay. Il existe aussi un très bon tuto sur fait par exiit.

Bref, tout ca pour dire, que je vous propose une « édition » de silex, déjà packagée avec plusieurs services, comme les sessions, le cache, twig, etc etc … disponible sur github. Dans cette édition, il y a des exemples avec des formulaires, de la validation etc etc…

Enfin, n’hésitez pas a aller faire un tour sur le dépôt officiel de silex.

Lister ses films

Un petit script .sh (donc pour linux/mac) pour lister tous les films qui peuvent trainer dans plusieurs répertoires et sous répertoires…

wget https://gist.github.com/raw/1008082/dc6cdb8ae50bd981ae9458cc270f96de41583718/movieList.sh
chmod +x movieList.sh
# Configure VIDEO_FOLDER
gedit movieList.sh
./movieList.sh
cat movie_list.txt

Continue reading

Installer Redmine sur une debian Lenny 5

Redmine est une application web Open Source de gestion complète de projet en mode web, développé en Ruby sur la base du framework Ruby on Rails.

Principales fonctionnalités :

  • gestion multi-projets,
  • gestion fine des droits utilisateurs définis par des rôles,
  • gestion de groupes d’utilisateurs,
  • rapports de bogues (bugs), demandes d’évolutions,
  • Wiki multi-projets,
  • forums multi-projets

On va voir comment installer redmine sur une machine linux de type debian
(source : wikipedia)
Continue reading