Vraag over SELECT met een WHERE NOT (SELECT....)

Status
Niet open voor verdere reacties.

hfoppen

Terugkerende gebruiker
Lid geworden
15 nov 2000
Berichten
1.058
Beste mensen,

ben bezig met een webpagina en loop vast op het volgende.

Tabellen:
vrdnieuw (id, vrdnieuw, titel, omschrijving)
producten (id, titel, omschrijving)

fotos_vrdnieuw (fotoid, productid)
fotos_producten (fotoid, productid)

fotos (id, naam).

Op de beginpagina wordt nu de laatst toegevoegde foto (dus vanuit fotos) getoond. Echter mag dit enkel op basis van de foto's die zijn toegevoegd als product en niet die zijn toegevoegd als vrdnieuw.

Nu loop ik vast met m'n query.

Huidige:
PHP:
$sqlfoto = "SELECT * FROM fotos ORDER BY id DESC LIMIT 1";

Iets dergelijks zou het moeten zijn (volgens mij):
[SQL]
SELECT * FROM fotos WHERE Not
(SELECT * FROM fotos_vrdnieuw WHERE fotoid= id)
ORDER BY id DESC LIMIT 1
[/SQL]
of
[SQL]
SELECT * FROM fotos WHERE id = NOT
(SELECT * FROM fotos_vrdnieuw WHERE fotoid= id)
ORDER BY id DESC LIMIT 1
[/SQL]

Met die query wil ik dus de id's ophalen van alle fotos.fotoid en daarvan de max pakken (of dus die DESC LIMIT 1).
Maar blijkbaar doe ik iets fout, want ik krijg nu 0,0 results.

Iemand een suggestie wat ik fout doe??

Herbert

p.s. 'k heb ook al geprobeerd om bij het uploaden van de foto's in de tabel fotos iets als een 1 of een 0 te zetten en dan bij ophalen van de foto's alleen de 1-tjes te pakken (0=niet op homepagina tonen), maar dat werkte ook niet echt. Daarnaast vindt ik dit een nettere/betere oplossing.
 
Laatst bewerkt:
@hfoppen,

Vraagje waarom gebruik je 2 tabelen dan ?

Als je uit 2 tabelen de waarde's met elkaar wilt vergelijken en met die uitkomst een select wilt maken moet je met LEFT JOIN gaan werken. Maar ook dan kun je voor zover ik me kan herinneren niet een query in 1 doen waarmee je de anderen uitsluit.

Anders zou je met 2 query's moeten gaan werken, eerst selecteren wat het niet mag zijn en dan een "in (1,2,3,4) gebruiken.

stel je wilt id's 23,49,81,101 hebben. Dit kun je op 2 manieren doen.

[SQL]SELECT * FROM fotos WHERE id=23 OR id=49 OR id=81 OR id=101[/SQL]
of
[SQL]SELECT * FROM fotos WHERE id in (23,49,81,101) [/SQL]

Het makkelijkste is toch in de 'hoofd tabel' een field er bij zetten waarin je de zoek waarde gebruikt. Aangezien ze op vrdnieuw na compleet het zelfde zijn.

En dan maak je het voor jezelf een stuk simpeler door
[SQL]SELECT * FROM fotos WHERE vrdnieuw=0[/SQL]

Of ik snap je vraag niet helemaal of je hebt hier wat aan :-) iig succes.. ik lees je reactie wel.
Groetjes,
René
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan