Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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)

Hors ligne

#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

Hors ligne

#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 neutral

merci par avance !

Hors ligne

#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 ?

Hors ligne

#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

Hors ligne

#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 tongue )


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)

Hors ligne