Requete qui se comporte bizarrement des qu'il y a plus d'une entrée - SQL/NoSQL - Programmation
Marsh Posté le 16-01-2006 à 19:39:47
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 !=
Marsh Posté le 16-01-2006 à 19:46:05
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
Marsh Posté le 16-01-2006 à 20:40:06
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
Marsh Posté le 16-01-2006 à 20:50:47
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
Marsh Posté le 16-01-2006 à 21:07:14
il y a plein de moyen pour arriver à un résultat. Moi perso je suis friant des sous requetes car c'est tres puissant.
Marsh Posté le 16-01-2006 à 18:21:19
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 :
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 ?