ugrás a tartalomhoz

SQL szavazás lekérés

Radon · 2014. Jan. 4. (Szo), 12.54
Sziasztok!
Van 1 programom, amiben pl könyvekre lehet szavazni, és azt akarom, hogy amire már szavaztam, azt ne dobja fel.
Van egy Books tábla, id mező.
és van egy Votes tábla, books_id, és user_id.

Szóval azok a books(id)-k kellenének, amik nincsenek a votes táblában a user_id mellett. Ezzel 2 gondom van. Mivel 1 lekérés, össze kell kötnöm a 2 táblát így:
WHERE books.id=votes.books_id.
de pont az ellentétét akarom.
A másik meg, hogy ha ezt a feltételt rakom be:
WHERE votes.user_id!=$_SESSION['user_id']
, nem zárja ki a hozzá tartozó books_id-t, ha közben érkezett erre a books_id-re mástól szavazat.

Elég egyszerűnek tűnik a probléma, logikai dolgot nem is szoktam kérdezni, de most vmiért nem ugrik be.
 
1

IS NULL

pkadam · 2014. Jan. 4. (Szo), 18.45
A két táblát LEFT JOIN-nal kötöd össze, és azokat a sorokat keresed, ahol hiányzik a hozzá tartozó szavazat a felhasználó részéről.

SELECT
	*
FROM
	books
LEFT JOIN
	votes
ON	(
	books.id = votes.books_id
	AND
	votes.user_id = '{$_SESSION['user_id']}'
	)
WHERE
	votes.books_id IS NULL
2

Kösz

Radon · 2014. Jan. 4. (Szo), 23.46
Isten vagy. köszi
3

A nyilvánvalóbb, de általában

tgr · 2014. Jan. 7. (K), 12.58
A nyilvánvalóbb, de általában kevésbé hatékony (SQL motorja válogatja) megoldás a

SELECT * 
FROM books 
WHERE NOT EXISTS (
    SELECT *
    FROM votes
    WHERE votes.user_id = '{$_SESSION['user_id']}' 
      AND votes.books_id = books.id
)