Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/11/2011, 09h30   #1
Membre du Club
 
Inscription : mai 2007
Messages : 209
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 209
Points : 50
Points : 50
Par défaut Afficher les lignes se trouvant pas dans une table

Bonjour,
Mon titre n'est pas très claire dsl .

Voila j'ai une table historique qui comporte en autre comme champs "id_video" et "nb_lecture"
Et j'ai donc une table video avec "id_video", "titre", ....

Se que je cherche a faire c'est afficher les résultats de la table historique (select id_video, nb_lecture from historique) et ajouter a cette liste les id_video de la table video qui ne sont pas dans la table historique et mettre comme valeur du champ nb_lecture 0.

Merci de votre aide
christobale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 09h52   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
As-tu essayé une requête ?
Il faut utiliser NOT EXISTS.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 10h10   #3
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Moi je vois plutôt une jointure :
Code :
1
2
3
 
SELECT v.titre AS titre, h.nb_lecture AS nb_lecture FROM video v
LEFT JOIN historique h ON h.id_video = v.id_video
Meilleures salutations.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 10h31   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Effectivement, je n'avais retenu du besoin que
Citation:
les id_video de la table video qui ne sont pas dans la table historique
.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 11h09   #5
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
A quoi sert EXISTS de manière simple ?
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 12h02   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Citation:
A quoi sert EXISTS de manière simple ?
Pour rester dans le cas de cette discussion, imaginons la besoin suivant :
Quelles sont les vidéos qui ont un historique ?

Allons un peu plus loin :
Quelles sont les lignes de la table video pour lesquelles il existe au moins une ligne dans la table historique ?

Réponse :
Code :
1
2
3
4
5
6
7
8
SELECT v.titre
FROM video v
WHERE EXISTS
(
	SELECT *
	FROM historique h
	WHERE h.id_video = v.id_video
)
Ça ressemble à une jointure sauf que la jointure va mettre en relation toutes les lignes de la table historique qui correspondent à une ligne de la table video alors qu'avec EXISTS, la recherche de correspondance s'arrête dès qu'une ligne est trouvée. Comme dans le besoin exprimé je n'ai pas besoin des informations figurant dans la table historique mais seulement de savoir s'il existe un historique, EXISTS est potentiellement plus performant que JOIN.

Idem pour NOT EXISTS si je cherche les vidéos qui n'ont pas d'historique : dès que le SGBD trouve une ligne dans historique qui correspond à la ligne de video inspectée, il passe à la vidéo suivante.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 19h46   #7
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Citation:
Envoyé par CinePhil Voir le message
Pour rester dans le cas de cette discussion, imaginons la besoin suivant :
Quelles sont les vidéos qui ont un historique ?

Allons un peu plus loin :
Quelles sont les lignes de la table video pour lesquelles il existe au moins une ligne dans la table historique ?

Réponse :
Code :
1
2
3
4
5
6
7
8
SELECT v.titre
FROM video v
WHERE EXISTS
(
	SELECT *
	FROM historique h
	WHERE h.id_video = v.id_video
)
Ça ressemble à une jointure sauf que la jointure va mettre en relation toutes les lignes de la table historique qui correspondent à une ligne de la table video alors qu'avec EXISTS, la recherche de correspondance s'arrête dès qu'une ligne est trouvée. Comme dans le besoin exprimé je n'ai pas besoin des informations figurant dans la table historique mais seulement de savoir s'il existe un historique, EXISTS est potentiellement plus performant que JOIN.

Idem pour NOT EXISTS si je cherche les vidéos qui n'ont pas d'historique : dès que le SGBD trouve une ligne dans historique qui correspond à la ligne de video inspectée, il passe à la vidéo suivante.
Puis-je aussi avoir dans ce schéma, une utilisation de ANY et aussi à quoi il sert.

Merci beaucoup maitre.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h26.


 
 
 
 
Partenaires

Hébergement Web