Affichage dans une view avec une condition particulière

cs_veridik
Messages postés
13
Date d'inscription
mercredi 11 mai 2005
Statut
Membre
Dernière intervention
24 juillet 2013
- 7 févr. 2006 à 15:17
Mindiell
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
- 13 févr. 2006 à 15:41
Bonjour,



Etant débutant en SQL, je vous pose une question,



j'ai une Table `students` et une table `logaccess`.



Je veux sélectionner tous mes `students`.`idbadge` selon une condition particulière.



Explication : dans ma table `logaccess` j'ai des `idbadge`type INT et un `horodate` type TIMESTAMP.



Je veux afficher dans une view (je suis en mySQL 5.0)



col1 `idbadge` et col2 `horodate`



Dans ma col1 je veux tous les students.idbadge avec dans col2 leurs logaccess.horodate correspondants.



Mais pour les étudiants qui n'ont pas de horodate....ben je veux afficher un NULL est ce possible ?



<!--c1-->





<!--ec1-->DROP VIEW IF EXISTS `badge_log`.`vw_test`;
CREATE
ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER
VIEW `vw_test` AS select sql_no_cache `students`.`idbadge` AS
`idbadge`,cast(`logaccess`.`horodate` as date) AS `date` from
`students`,`logaccess` WHERE `logaccess`.`idbadge`=`students`.`idbadge`;<!--c2-->

<!--ec2-->



Dans mon WHERE je sais pas quoi utilisé car ici je ne selectionne que ceux qui ont un horodate dans logaccess.

2 réponses

cs_veridik
Messages postés
13
Date d'inscription
mercredi 11 mai 2005
Statut
Membre
Dernière intervention
24 juillet 2013

7 févr. 2006 à 15:48
Bon j'ai une solution fonctionnelle



DROP VIEW IF EXISTS `badge_log`.`vw_test`;

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY
DEFINER VIEW `vw_test` AS select sql_no_cache `students`.`idbadge` AS
`idbadge`,cast(`logaccess`.`horodate` as date) AS `date` from
`students`,`logaccess` WHERE `logaccess`.`idbadge`=`students`.`idbadge`

UNION

select `students`.`idbadge` AS `idbadge`, NULL AS `date` from
`students` WHERE `idbadge` NOT IN (SELECT `idbadge` from `logaccess`)



Est il possible d'alléger cette requete ?
0
Mindiell
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1
13 févr. 2006 à 15:41
Ca s'appelle une jointure externe :
remplace "from `students`,`logaccess` WHERE `logaccess`.`idbadge`=`students`.`idbadge`;"
par " FROM Students LEFT OUTER JOIN logaccess ON logacess.idbadge = students.idbadge"
<!--c2--><!--ec2-->

Mindiell Software
0