SQL Déterminer choix dans une liste triée
ylsnovak
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
ylsnovak Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
ylsnovak Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Difficile de faire un titre explicite avec si peu de caractères. :-/
J'ai deux tables :
Les collaborateurs avec leurs IDs.
Les voyages avec les dates des déplacements. une colonne avec l'ID du collab, une avec les dates de déplacements et l'une avec les lieux de destination.
Comment faire un lien entre ses tables pour rechercher la localisation a une date données. Bien sur la date ne correspond pas forcement a un voyage. On cherche première date précédent la date de recherche.
La première partie doit concerner la table des collaborateur. S'il ne se sont jamais déplacer le résultat ne peux pas être vide mais avoir une ligne avec le nom du collaborateur et NULL.
Si vous avez une idée ou qu'il y a une réponse a une question similaire. J'avoue ne pas avoir su trouver les bons mots clefs en utilisant la recherche du forum.
Merci a tous ^^
Difficile de faire un titre explicite avec si peu de caractères. :-/
J'ai deux tables :
Les collaborateurs avec leurs IDs.
Les voyages avec les dates des déplacements. une colonne avec l'ID du collab, une avec les dates de déplacements et l'une avec les lieux de destination.
Comment faire un lien entre ses tables pour rechercher la localisation a une date données. Bien sur la date ne correspond pas forcement a un voyage. On cherche première date précédent la date de recherche.
La première partie doit concerner la table des collaborateur. S'il ne se sont jamais déplacer le résultat ne peux pas être vide mais avoir une ligne avec le nom du collaborateur et NULL.
Si vous avez une idée ou qu'il y a une réponse a une question similaire. J'avoue ne pas avoir su trouver les bons mots clefs en utilisant la recherche du forum.
Merci a tous ^^
A voir également:
- SQL Déterminer choix dans une liste triée
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Liste code ascii - Guide
- Site dangereux liste - Guide
- Liste site streaming illégal - Accueil - Services en ligne
6 réponses
alors pour etre sur que j'ai bien compris.
tu vas donner une date en variable, et tu veux que ton programme te dise :
pierre était à paris
paul etait à new york
yannick était à trouperdu-les-vaches-sur-ruisseau
marc était nul (désolé, humour pourri)
sachant que ta table voyages est du genre
id -- lieu -- départ -- arrivée
10 -- new-york -- 01/10/11 -- 10/10/11
10 -- paris -- 11/10/11 -- 22/10/11
10 -- tokyo -- 30/10/11 -- 01/11/11
pour moi, il est dispensable que l'on ait une date de début de voyage ou de fin de voyage
ou alors il faut avoir quelque chose comme ça
id -- ville -- journée
10 -- new-york -- 01/10/11
10 -- new-york -- 02/10/11
10 -- new-york -- 03/10/11
10 -- new-york -- 04/10/11
mais comme ça, ta base va etre énorme, vu que tu auras 300 lignes par personne par an.
une troisieme possibilité consiste a avoir du champs texte dans ta base indiquant 'du 01/10/11 au 10/10/11', mais ça veut dire du traitement de texte en folie dans les requetes, donc je préfere imaginer que personne n'a envisagé de faire comme ça.
si tu as choisi l'option 1, c'est relativement facile
tu fais un
tu fait rentrer ta valeur en variable
select personne.nom, voyage.ville from personne, voyage where personne.id=voyage.id and voyage.depart < variable and voyage.arrivee > variable
ce n'est pas tout a fait ce que tu as demandé, car il n'y a pas le null
je sais qu'il suffit de rajouter une option pour forcer l'affichage (je crois que c'est lié au group by), je réfléchis et j'essaye de retrouver ça.
tu vas donner une date en variable, et tu veux que ton programme te dise :
pierre était à paris
paul etait à new york
yannick était à trouperdu-les-vaches-sur-ruisseau
marc était nul (désolé, humour pourri)
sachant que ta table voyages est du genre
id -- lieu -- départ -- arrivée
10 -- new-york -- 01/10/11 -- 10/10/11
10 -- paris -- 11/10/11 -- 22/10/11
10 -- tokyo -- 30/10/11 -- 01/11/11
pour moi, il est dispensable que l'on ait une date de début de voyage ou de fin de voyage
ou alors il faut avoir quelque chose comme ça
id -- ville -- journée
10 -- new-york -- 01/10/11
10 -- new-york -- 02/10/11
10 -- new-york -- 03/10/11
10 -- new-york -- 04/10/11
mais comme ça, ta base va etre énorme, vu que tu auras 300 lignes par personne par an.
une troisieme possibilité consiste a avoir du champs texte dans ta base indiquant 'du 01/10/11 au 10/10/11', mais ça veut dire du traitement de texte en folie dans les requetes, donc je préfere imaginer que personne n'a envisagé de faire comme ça.
si tu as choisi l'option 1, c'est relativement facile
tu fais un
tu fait rentrer ta valeur en variable
select personne.nom, voyage.ville from personne, voyage where personne.id=voyage.id and voyage.depart < variable and voyage.arrivee > variable
ce n'est pas tout a fait ce que tu as demandé, car il n'y a pas le null
je sais qu'il suffit de rajouter une option pour forcer l'affichage (je crois que c'est lié au group by), je réfléchis et j'essaye de retrouver ça.
Ouch,
déja au vu de ta base, tes informations seront faussées, désolé de te l'apprendre.
a moins qu'il y ait des lignes
10 -- bureau-- 10/10/11
10 -- vacances -- 15/10/11
10 -- maladie -- 22/10/11
le null ne servira à rien... ou plus exactement, le null n'apparaitra que pour ceux qui n'ont jamais voyagé.
j'ai bien compris que ce n'est pas ta faute, et après tout c'est peut-etre un exercice, donc on s'en fout des détails.
la réponse doit etre obtenue uniquement en sql (exercie), ou c'est le résultat qui compte (travail) ?
Stop failing the turing test !
déja au vu de ta base, tes informations seront faussées, désolé de te l'apprendre.
a moins qu'il y ait des lignes
10 -- bureau-- 10/10/11
10 -- vacances -- 15/10/11
10 -- maladie -- 22/10/11
le null ne servira à rien... ou plus exactement, le null n'apparaitra que pour ceux qui n'ont jamais voyagé.
j'ai bien compris que ce n'est pas ta faute, et après tout c'est peut-etre un exercice, donc on s'en fout des détails.
la réponse doit etre obtenue uniquement en sql (exercie), ou c'est le résultat qui compte (travail) ?
Stop failing the turing test !
bon, si c'est de la prod, alors, tout les coups sont permis...
cool...
la solution ici, est de ne pas se 'borner' à la base de donnée, et de ne pas essayer de faire le truc en une requete, mais plutot en plein de requete dans une boucle.
par exemple un truc du genre :
tu saisie la date dans choix_date
POUR compte DANS 'select id from personne;' FAIRE
select personne.nom, voyage.ville where personne.id=voyage.id and personne.id= $compte and date > $choix_date limit 1;
FIN POUR
tu rajoute une conditionelle quelque part pour afficher un 'null'
et tu vas prendre une douche (ou plusieurs) en essayant de te rassurer en te disant que tout le monde aurait fait pareil, c'est pas sale...
cool...
la solution ici, est de ne pas se 'borner' à la base de donnée, et de ne pas essayer de faire le truc en une requete, mais plutot en plein de requete dans une boucle.
par exemple un truc du genre :
tu saisie la date dans choix_date
POUR compte DANS 'select id from personne;' FAIRE
select personne.nom, voyage.ville where personne.id=voyage.id and personne.id= $compte and date > $choix_date limit 1;
FIN POUR
tu rajoute une conditionelle quelque part pour afficher un 'null'
et tu vas prendre une douche (ou plusieurs) en essayant de te rassurer en te disant que tout le monde aurait fait pareil, c'est pas sale...
Merci Dna.Factory pour ton explication rapide et claire.
J'aurais du prendre le temps de donner un exemple de la base, ca aurait été beaucoup plus simple.
Voila un exemple de la table :
id -- lieu -- départ_le
10 -- new-york -- 10/10/11
10 -- paris -- 22/10/11
10 -- tokyo -- 01/11/11
Si je cherche 25/10/11 je veux obtenir tokyo car il a quitté paris le 22/10/11 il se trouve maintenant à Tokyo.
Comme tu le souligne, heureusement je n'ai pas une ligne par jour ^^. Mais malheureusement, je n'ai pas la main sur la structure de la base de données et je ne peux pas donc rajouter d'autre dates dans cette table.
On peut oublier le null pour l'occasion.
J'aurais du prendre le temps de donner un exemple de la base, ca aurait été beaucoup plus simple.
Voila un exemple de la table :
id -- lieu -- départ_le
10 -- new-york -- 10/10/11
10 -- paris -- 22/10/11
10 -- tokyo -- 01/11/11
Si je cherche 25/10/11 je veux obtenir tokyo car il a quitté paris le 22/10/11 il se trouve maintenant à Tokyo.
Comme tu le souligne, heureusement je n'ai pas une ligne par jour ^^. Mais malheureusement, je n'ai pas la main sur la structure de la base de données et je ne peux pas donc rajouter d'autre dates dans cette table.
On peut oublier le null pour l'occasion.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ce n'est pas un exercice j'ai bien cette base en face des yeux, elle est bien pleine :D. Pour 'simplifier' je ne met pas toutes les colonnes ( une 50aine ) car on n'ont rien a voir avec mon problème.
Si on reprend ton dernier exemple :
10 -- bureau-- 10/10/11
10 -- vacances -- 15/10/11
10 -- maladie -- 22/10/11
le 20/10/11 il était en maladie.
Oui tu as bien analysé la situation : c'est mal br_nlé mais j'y peux rien ^^. Ca a du sembler logique a un autre gars à une autre époque.
Une autre question pourrait être combien te temps était il en maladie ? la réponse serait du 16/10/11 au 22/10/11.
Si on reprend ton dernier exemple :
10 -- bureau-- 10/10/11
10 -- vacances -- 15/10/11
10 -- maladie -- 22/10/11
le 20/10/11 il était en maladie.
Oui tu as bien analysé la situation : c'est mal br_nlé mais j'y peux rien ^^. Ca a du sembler logique a un autre gars à une autre époque.
Une autre question pourrait être combien te temps était il en maladie ? la réponse serait du 16/10/11 au 22/10/11.