SQL Déterminer choix dans une liste triée
Fermé
ylsnovak
Messages postés
4
Date d'inscription
vendredi 17 juillet 2009
Statut
Membre
Dernière intervention
15 novembre 2011
-
15 nov. 2011 à 13:23
ylsnovak Messages postés 4 Date d'inscription vendredi 17 juillet 2009 Statut Membre Dernière intervention 15 novembre 2011 - 15 nov. 2011 à 17:16
ylsnovak Messages postés 4 Date d'inscription vendredi 17 juillet 2009 Statut Membre Dernière intervention 15 novembre 2011 - 15 nov. 2011 à 17:16
A voir également:
- SQL Déterminer choix dans une liste triée
- Liste déroulante de choix excel - Guide
- Liste déroulante en cascade - Guide
- Liste site streaming illégal - Accueil - Services en ligne
- Liste de diffusion whatsapp - Guide
- Gertrude a préparé la liste des affaires à prendre pour l'excursion. juliette a modifié cette liste en utilisant le mode suivi des modifications proposé par le traitement de texte. - Guide
6 réponses
dna.factory
Messages postés
25454
Date d'inscription
mercredi 18 avril 2007
Statut
Modérateur
Dernière intervention
2 janvier 2025
1 613
15 nov. 2011 à 14:21
15 nov. 2011 à 14:21
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.
dna.factory
Messages postés
25454
Date d'inscription
mercredi 18 avril 2007
Statut
Modérateur
Dernière intervention
2 janvier 2025
1 613
Modifié par dna.factory le 15/11/2011 à 15:52
Modifié par dna.factory le 15/11/2011 à 15:52
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 !
dna.factory
Messages postés
25454
Date d'inscription
mercredi 18 avril 2007
Statut
Modérateur
Dernière intervention
2 janvier 2025
1 613
15 nov. 2011 à 16:48
15 nov. 2011 à 16:48
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...
ylsnovak
Messages postés
4
Date d'inscription
vendredi 17 juillet 2009
Statut
Membre
Dernière intervention
15 novembre 2011
15 nov. 2011 à 15:13
15 nov. 2011 à 15:13
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.
dna.factory
Messages postés
25454
Date d'inscription
mercredi 18 avril 2007
Statut
Modérateur
Dernière intervention
2 janvier 2025
1 613
15 nov. 2011 à 15:17
15 nov. 2011 à 15:17
après travail de mémoire, c'est avec les inner join pour obtenir les nulls, mais comme tu l'as dis, on pourra voir plus tard.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ylsnovak
Messages postés
4
Date d'inscription
vendredi 17 juillet 2009
Statut
Membre
Dernière intervention
15 novembre 2011
15 nov. 2011 à 16:14
15 nov. 2011 à 16:14
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.
ylsnovak
Messages postés
4
Date d'inscription
vendredi 17 juillet 2009
Statut
Membre
Dernière intervention
15 novembre 2011
15 nov. 2011 à 17:16
15 nov. 2011 à 17:16
Bon je crois que je vais prendre la solution de la douche ... la performance n'est vraiment pas critique dans ce cas. (1ms ? 100ms ? pareil). Merci beaucoup pour ton aide
Si je trouve une soluce je la présentais :)
Si je trouve une soluce je la présentais :)