join hvor udebleven række bliver til null
Hej!Jeg har 2 tabeller, billeder og thumbnails, hvor billeder referer til thumbnails via et thumb_id-felt.
I mit system kan det samme billede godt referere til det samme thumbnail, så derfor vil jeg gerne tjekke, inden jeg sætter et nyt billede + thumbnail ind i tabellerne, om billedet og/eller thumbnailen eksisterer i forvejen.
Er det muligt vha. een query (altså ikke noget med 2 eller flere querier)? Jeg havde forestillet mig noget ala en join, hvor den, hvis det var muligt, kunne indsætte et null, hvis billedet i billeder-tabellen f.eks. ikke eksisterede, mens man stadig ville få thumbnail'en.
Et par eksempler:
Både billede og thumbnail:
|pictID|thumbID|
23 56
Billede, men intet thumbnail
|pictID|thumbID|
23 null
Intet billede men thumbnail
|pictID|thumbID|
null 56
Jeg er selv kommet frem til noget á la (billederne bliver identificeret via et unique_id som bare er et md5-sum af filen.)
SELECT DISTINCT IF ( fileT.unique_id = '56d85eaca9dabc8ef769de61a2719023', fileT.id, NULL ) AS fileID, IF ( pictT.unique_id = '56d85eaca9dabc8ef769de61a2719023', pictT.id, NULL ) AS pictID, pictT.dir_id, dirT.filename as dir_path FROM files AS fileT, pictures AS pictT left join directories as dirT on (pictT.dir_id = dirT.id) HAVING fileID IS NOT NULL OR pictID IS NOT NULL ORDER BY fileID DESC , pictID DESC
som giver hvis både billede og thumbnail eksisterer:
fileID | pictID | dir_id | dir_path
100 100 13 2005-05-18 Diverse/
Som I kan se virker det sådan set udmærket. Problemet er at den tager 0.1232 sek. at udføre, så derfor bliver den hurtig tung at lege med hvis man bare har 15-20 billeder man skal kigge på ad gangen.
