Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3331 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requete qui se comporte bizarrement des qu'il y a plus d'une entrée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requete qui se comporte bizarrement des qu'il y a plus d'une entrée

n°1284831
l3eleg
cosmik connection
Posté le 16-01-2006 à 18:21:19  profilanswer
 

Bonjour à tous et bonne année !
Je suis en train de travailler sur une base de questions/réponses pour un formulaire d'inscription.
J'ai deux tables qui ont la structure suivante :
La table QUESTION contient les 71 questions à poser au visiteur.
La table DETAILS contient les reponses du visiteur
 
Table QUESTION :
- QID (PK)
- Question (Contient la question à poser)
 
Table DETAILS :
- DID (PK)
- QUESTION_QID (FK, pointe sur QUESTION.QID)
- VISITEUR_PID (FK, pointe sur VISITEUR.PID, c'est l'id du compte connecté)
- Reponse
 
Voila le principe, je cherche à récupérer un tableau en php contenant les QID des questions qui n'ont pas été posé à l'utilisateur, j'ai donc écris la requête suivante :
 

Code :
  1. "SELECT question.QID,question.QUESTION FROM question,details WHERE details.VISITEUR_PID = '1' AND details.QUESTION_QID != question.QID"


 
Je l'ai testé en insérant un enregistrement de test dans DETAILS, avec QUESTION_QID = 1, la requête fonctionne, le problème survient lorsque l'on ajoute plusieurs entrées dans DETAILS, en effet, dès qu'on a deux enregistrements, la requête retourne tout les QID, parfois il y a même plusieurs copies du même QID.
J'ai du mal à comprendre d'ou vient le problème vu que ma requete me parait logique, donc je me tourne un peu vers vours au cas ou :)
Je précise que toutes les tables sont en InnoDB.
Quelqu'un voit il une erreur dans mon raisonnement ?

mood
Publicité
Posté le 16-01-2006 à 18:21:19  profilanswer
 

n°1284907
moi23372
Posté le 16-01-2006 à 19:39:47  profilanswer
 

SELECT question.QID,question.QUESTION  
FROM question,details  
WHERE details.QUESTION_QID = question.QID
AND details.VISITEUR_PID = '1'  
 
pourquoi tu avais mis un !=, faut mettre un = sinon la jointure ne marche pas. Si tu as encore des doublons, tu fais un SELECT DISTINCT ... mais normalement tu n'en auras pas
 
De plus le != n'est pas normalisé en SQL, pour dire différent c'est <> et pas !=


Message édité par moi23372 le 16-01-2006 à 19:40:58
n°1284912
l3eleg
cosmik connection
Posté le 16-01-2006 à 19:46:05  profilanswer
 

Je met un différent parce que je souhaite retourner tout les QID qui ne sont pas deja inscrit dans la table DETAILS ou VISITEUR_PID = 1
Ta requete fonctionne mais fait l'inverse :)
Je ne savais pas pour le !=, j'ai essayé avec <> mais j'obtiens tout de même quelques doublons (mais moins, curieusement j'ai un doublon pour tout les QID qui ne sont pas dans la table DETAILS). Etrange, heureusemnt que le distinct est la ;)
Curieusement avec le <> il retourne tout les champs, en doublonnant ceux qui ne repondent pas aux criteres du WHERE
J'ai fais quelques tests et c'est le meme probleme : Si details ne contient qu'une entrée il filtre bien, mais quand il y en a plus avec un QID different mais un PID identique, alors il ne filtre plus rien.
Si quelqu'un sait le pourquoi des doublons, je suis interessé pour ma culture ;)
Merci pour la remarque en tout cas


Message édité par l3eleg le 16-01-2006 à 19:51:25
n°1284965
moi23372
Posté le 16-01-2006 à 20:40:06  profilanswer
 

SELECT QID, QUESTION
FROM QUESTION
WHERE QID NOT IN  
(SELECT question.QID
FROM question,details  
WHERE details.QUESTION_QID = question.QID  
AND details.VISITEUR_PID = '1' );
 
voila ça fais l'inverse ça :D

n°1284970
l3eleg
cosmik connection
Posté le 16-01-2006 à 20:50:47  profilanswer
 

Oué j'me disais qu'il fallait surement en passer par une sous requête.
Ca marche en tout cas, merci, j'hésitais à utiliser une sous requête je pensais qu'il y avait un autre moyen ;)


Message édité par l3eleg le 16-01-2006 à 20:54:37
n°1284993
moi23372
Posté le 16-01-2006 à 21:07:14  profilanswer
 

il y a plein de moyen pour arriver à un résultat. Moi perso je suis friant des sous requetes car c'est tres puissant.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requete qui se comporte bizarrement des qu'il y a plus d'une entrée

 

Sujets relatifs
Requete selection aleatoire SQLrequete sur deux tables à optimiser
Pb requete sqlPb écriture requete sql
Créer une requete SELECT a une base de donnée ACCESS[SQL Server] Executer un fichier SQL depuis une requête
[Résolu] Casse dans une requête sqlsous sql plus exporter les résultats d'une requête dans un fichier
Problème requête SQLaccess requete pb
Plus de sujets relatifs à : Requete qui se comporte bizarrement des qu'il y a plus d'une entrée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR