Først og fremmest skulle det være "Select id, photoId FROM picLink where keywordid = 151".
For det andet, så ja. Så længe keywordid ikke skal udskrives, kunne det være muligheden Men hvis man nu udskriver fra 140 til 160 og ønsker keywordid udskrævet, så skal den også med
Han har en mange-til-mange relation, han vil kun have de photoid'er der har fået tildelt keywordid 151, med undtagelse af dem der også har fået tildelt keywordID 400
i.e.:
picLink ------- photoID keywordID
photo ----- photoID felt2 felt3
Det var i hvert tilfælde sådan jeg forstod det i et andet spørgsmål tidligere på dagen
Du kan jo lave en SQL sætning først der søger IDen på de PhotoIDer der har piclink 400, og så lave en SQL sætning hvor du søger keywordid 151 med undtagelse af de første IDer. Men det ville blive noget rod tror jeg.
Hvad med at bruge EXISTS, findes denne funkton i tiligere MySQL (Jeg fandt noget dokumentation på denne funktion og MySQL fra 2002).
select * from picLink where keywordid = 151 and photoID NOT EXISTS(Select photoID from picLink pl where pl.photoID = pickLink.photoID and keywordid = 400)
Jeg må desværre melde pas, og foreslå at du flytter spørgsmålet over til MySQL emnet. Jeg kigget på koden i sektoin 13.1.8.11, men den kan ikke bruges direkte, da forslaget med Not Exist bruger en link mellem to foreskellige tabeller. Her er der behov for at linke til samme tabel to gange, og egentlig filtrere indholdet af de to instaces af tabellen, inden linken laves.
*henninghabor* Går ikke. Han skal kun have de keywordider som ikke har en photoID tilsvarene en en anden photoID med samme ID, men med keywordid på 400
Ok, det er jo ikke det der bliver spurgt efter. At han så tidligere har oprettet et spørgsmål hvor han bedre forklarer problemstillingen har han jo ikke gjort opmærksom på. :)
Når, men som sagt af to andre. Smid det ind til MySQL folkene. Tror du skal have en RIGHT JOIN på også for at få hele din betingelse med. Kan sagtens få den til at gøre hvad den skal, men så lopper den det samme info flere gange...
Det er dem her du gerne vil have: SELECT DISTINCT photoID, keywordID FROM picLink WHERE keywordid = 151
Men photoID må ikke samtidig være med her: SELECT DISTINCT photoID, keywordID FROM picLink WHERE keywordid = 400
Så mit bud er at LEFT OUTER JOINe de to, og kun tage dem med, som ikke har indhold i 400-sættet. F.eks. sådan her:
SELECT med.photoID, med.keywordID as med_keywordID, ikke.keywordID as ikke_keywordID FROM (SELECT DISTINCT photoID, keywordID FROM picLink WHERE keywordid = 151) AS med LEFT OUTER JOIN (SELECT DISTINCT photoID, keywordID FROM picLink WHERE keywordid = 400) AS ikke ON med.photoID = ikke.photoID WHERE ikke.keywordID IS NULL
Det virker på min MySQL, men det er en 4.1 - så jeg vil ikke garantere noget.
Jep det er gjort, troede det var så bøvlt at arbejde med mysql, men takker for jeres hjælp :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.