Pages : 1
#1 Le 28/04/2010, à 09:06
- mixout
[résolu] mysql : reporting ultra-basique
Bonjour
j'espère que vous serez indulgents, la question n'est pas spécifique à Ubuntu
voilà:
j'ai une base MySQL(sur un serveur ubuntu) avec ces deux tables :
table 1 : ID, Date, Heure, etc.
table 2 : ID, Nom, Prénom, etc.
j'aurais besoin de créer un fichier texte (que je pourrais ensuite importer dans un tableur,ou autre)
contenant les données suivantes classées comme suit:
Date, Heure, Nom, Prénom
Voilà, ça doit etre ultra-simple pour un connaisseur en SQL que je ne suis pas du tout, mais alors pas du tout !
La personne qui bosse habituellement la-dessus est en maladie.
Dernière modification par mixout (Le 28/04/2010, à 15:03)
#2 Le 28/04/2010, à 09:46
- yohann
Re : [résolu] mysql : reporting ultra-basique
salut, si ID est bien le champ de liaison entre les 2 tables:
voici la requête à faire:
SELECT Date, Heure, Nom, Prénom FROM table1 NATURAL JOIN table2;
(ensuite pour créer le fichier texte a partir de cette requête il faut rediriger la sortie vers un fichier)
voila ce que tu peux faire depuis un shell:
echo "SELECT Date, Heure, Nom, Prénom FROM table1 NATURAL JOIN table2;" | mysql -u <ton user> -p<ton pass> <ta base> > <ton fichier>
il n'y a pas d'espace entre -p et <ton pass> (et il ne faut pas mettre les <> autour des valeur, par exemple pour se connecter à la base voiture avec le user yohann mot de passe azerty et envoyer les données dans fichier.txt:
echo "SELECT Date, Heure, Nom, Prénom FROM table1 NATURAL JOIN table2;" | mysql -u yohann -pazerty voiture > fichier.txt
j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.
Hors ligne
#3 Le 28/04/2010, à 09:50
- manifesto666
Re : [résolu] mysql : reporting ultra-basique
Ta question m'intriguais, après qques recherches je trouve :
select FIELD from TABLE into outfile 'FILE' OPTIONS ;
Par exemple extraires les User/Host de mysql..user :
select Host,User from user into outfile '/tmp/out.db' fields terminated by '|' ;
Ca créé un fichier /tmp/out.db avec les données et les champs séparés par |.
Facile ensuite de mettre ca dans un tableur.
Si tu dois utiliser ca sous windows il faut certainement changer le marqueur de fin de lignes.
Dans ton cas il faut faire une jointure
select a.Date, a.Heure, b.Nom, b.Prénom from table1 a, table2 b where a.ID=b.ID
Le SQL peut etre spécifique et je suis plutot habitué à Sybase que mysql mais va devrait plus ou moins marcher.
Plus d'infos :
http://dev.mysql.com/doc/refman/4.1/en/select.html
Bon courage.
Hors ligne
#4 Le 28/04/2010, à 10:16
- mixout
Re : [résolu] mysql : reporting ultra-basique
Cooool !
merci !
je teste tout ça et je vous dis
#5 Le 28/04/2010, à 10:46
- mixout
Re : [résolu] mysql : reporting ultra-basique
ArgH!
c'est pas aussi simple.... et c'est moi qui vous ait induit en erreur, désolé
j'explique :
les ID ne sont pas identiques :
dans la table2, celle qui contient les noms et prénoms, il s'agit bien de l'ID, qui se nomme 'NUMBER' (avec une petite clé quand on regarde la table avec MySQL Query Browser)
dans la table1, celle qui contient des dates et heures, l'ID n'a rien à voir, mais cette table contient un champ, 'PERS_NUMBER', qui est bien le même que le champ 'NUMBER' de la table2
ce que j'arrive à faire, c'est afficher chacune des deux tables
ce que je sais PAS faire, c'est une requête affichant la table1, mais, au lieu de PERS_NUMBER, je voudrais que s'affiche NOM, PRENOM (issus de table2)
le résultat devrait etre :
DATE, HEURE, NOM, PRENOM
ensuite, pour les transformations en texte ou autres, je saurai me débrouiller
voilà, j'espère que c'est plus clair
merci par avance !
#6 Le 28/04/2010, à 11:10
- yohann
Re : [résolu] mysql : reporting ultra-basique
ok alors il faut remplace le natural join par un inner join c'est tout
SELECT Date, Heure, Nom, Prénom FROM table1 INNER JOIN table2 ON table1.NUMBER = table2.PERS_NUMBER;
ou meme seulement:
SELECT Date, Heure, Nom, Prénom FROM table1 INNER JOIN table2 ON NUMBER = PERS_NUMBER;
Dernière modification par yohann (Le 28/04/2010, à 11:11)
j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.
Hors ligne
#7 Le 28/04/2010, à 12:29
- mixout
Re : [résolu] mysql : reporting ultra-basique
re
j'y suis presque
Yohann, ta requete fonctionne nickel, merci
j'ai aussi essayé la requete de manifesto(merci à toi)
ça marchait aussi
j'ai juste un tout petit souci : les champs date, heure, n'existent pas vraiment, il s'agit d'un unique champ dont la valeur, à ce que j'ai compris, est un nombre de millisecondes aprés 00:00
ainsi
00:00 = 0
H+ 2 sec = 2000
H+ 3 mn = 180000
etc.
Vous qui savez, mySQL dispose-t-il (elle?) d'un système de transformation des dates direct dans la requête ou faut-il que je passe par un tableur ou autre ?
#8 Le 28/04/2010, à 13:16
- yohann
Re : [résolu] mysql : reporting ultra-basique
salut pour être sur il faudrait que tu donne le retour d'un
desc table2
mais la fonction mysql date_format devrait faire ton affaire:
SELECT Date, DATE_FORMAT(Heure,'%H:%i:%s' ) as Heure, Nom, Prénom FROM table1 INNER JOIN table2 ON NUMBER = PERS_NUMBER;
Dernière modification par yohann (Le 28/04/2010, à 13:19)
j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.
Hors ligne
#9 Le 28/04/2010, à 13:51
- mixout
Re : [résolu] mysql : reporting ultra-basique
Salut
le champ TIME qui contient le fameux chiffre est en int(11)
je crois que c'est pour cela que la requête utilisant
.../... DATE_FORMAT(TIME, '%H:%i,%s' )
renvoit toujours 00:00:00
alors je suis en train de tester un truc dans le genre
SELECT TIME, CONVERT(TIME,time), from etc..
mais ça ne va pas non plus, la valeur 2000, qui correspond à deux secondes est transformée en 00:20:00
#10 Le 28/04/2010, à 14:14
- yohann
Re : [résolu] mysql : reporting ultra-basique
désolé, mais je comprend plus trop en fait;
le champ time est une fusion de date et heure, et contient le nombre de µsecondes depuis 00H00 ?
mais de quel jour alors?
normalement dateformat devrait pouvoir d'aider encore faut il comprendre ce que contient de champs time (et utiliser les types appripriés ça aide pas mal a utiliser les fonctions appropriée )
j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.
Hors ligne
#11 Le 28/04/2010, à 15:03
- mixout
Re : [résolu] mysql : reporting ultra-basique
merci de ta patience...
j'y suis ! ouf.
la requete :
SELECT SEC_TO_TIME(TIME/1000), PRENOM, NOM FROM table1 INNER JOIN table2 ON table1.NUMBER = table2.PERS_NUMBER;
la fonction SEC_TO_TIME trouvée dans la doc MySQL, puis une division par 1000 puisque ce sont des millisecondes et hop !
Un grand merci encore à Yohann et manifesto666
Dernière modification par mixout (Le 28/04/2010, à 15:20)