ugrás a tartalomhoz

kezdő JOIN-WHERE probléma

gphilip · 2007. Jún. 17. (V), 14.03
Hali SQL mágusok! :)

Mivel még csak alapszinten sajátítottam el az SQL nyelvet, ezért egy - számotokra nyilván - alatvető kérdésben kérném a segítségeketeket.

Egy kérdőívet fejlesztek PHP-MySQL felállásban. Az adminisztrációs felületen meg lehet tekinteni a felhasználós listáját, akik addig kitötötték a kérdőívet, emellett megjelenik pár kérdésre adott válaszuk is a listában (jelesül név, email cím).

A kérdés szempontjáól releváns tánlák:

USERS
id: auto_incrementes egész típusú primary key
ip: a felhasználó ip-je
date: datetime, amikor elküldte a kérdőívet

ANSWERS
id: auto_incrementes egész típusú primary key
questionid: annak a kérdésnek az azonosítója a QUESTIONS táblából, amire az adott válasz érkezett
userid: annak az usernak az ID-je az USERS táblából, aki a választ adta
answer: maga a váalsz

A probléma pedig az, hogy egyetlen SQL sorral szeretném a felhasználók listáját leszűkítani azokra a felhasználókra, akik egy bizonyos kérdésre válaszoltak, tehát akiknél létezik az ANSWERS táblában olyan rekord, aminek USERID-je az övék, és a QUESTIONID egy bizonyos szám (pl 21). (Ha nem adta meg arra a kérdésre a váalszt, akkor nem is keletekzik rekord az ANSWERS táblában arról).

Lehet, hogy ez így nagyon homályos, de "SQL-esen" így fogalmaznám meg: "Válaszd ki az USERS táblából azokat a felhasználókat, akiknek az ID-jét USERIDként használva a az ANSWERS táblában létezik 21-es QUESTIONID-jű rekord."

A JOIN egy WHERE-rel kombinálva jó lenne, csakhogy akkor esetleg több, ugyanazon felhasználóhoz tartozó válasz esetén több rekordot ad ki, mint ahány ilyen felhasználó van.

Bocs, ha valami nem világos, kérdezzetek és pls help :)
 
1

Distinct kulcsszó

siposa · 2007. Jún. 17. (V), 14.51
A "distinct" pont erre való:

select distinct u.id, u.ip from users u 
inner join answers a on a.userid=u.id 
where a.questionid=21
2

igen, de mégse :)

gphilip · 2007. Jún. 17. (V), 15.57
igen, pont ez az, amit kerestem!

vagyis mégsem :) ez egy kérdés vizsgálatánál nagyon jól működik, de többnél már nem.
ugyanis a felhasználók listája nem csak egy válasz alapján szűkíthető (lenne), hanem mondjuk aszerint is, hogy melyik felhasználó töltötte ki a 21-es ÉS MÉG a 48-as kérdést IS!

Ekkor viszont a WHERE-nél egy AND-et betéve nem ad ki egyetlen rekordot sem... ötletek?
3

mert ez nem AND feltétel

Barkóczi Roland · 2007. Jún. 18. (H), 02.33
Gondold meg: lehet egyszerre az id=21 ÉS id=42? nem.
de így:
 ...where a.questionid in (21, 42) 
vagy így:
 ...where (a.questionid=21 or a.questionid=42)