MySQL, flere tabeller

Tags:    databaser

Hej

Jeg har et problem med min MySQL og at sammensætte flere tabeller sammen.

Se problemet på:
http://www.student.dtu.dk/~s042353/MySQL_problemer.txt

/Martin



3 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Ok



Hej Martin.

Problemet er at du forventer at få Booket = 1 for udstyr 1 (sko), men du får jo kun resultatet for event_id 1, og den er jo ikke booket, så det er ganske rigtigt det svar du får.

Du skal gå tilbage det den første sql af de to du havde lavet, og hvis du kan leve med at du ikke finder event_id på den event som faktisk er booket med det udstyr, ja så skal du blot fjerne event_id fra select'en og smide max foran din booket udregning ... det vil give noget i stil med:

SELECT id, navn, max(start <= 170 AND slut >= 170) AS booket
FROM udstyr
LEFT JOIN events ON id = udstyr_id
GROUP BY id
ORDER BY id ASC

som gerne skulle give dig den højeste booked værdi for hvert stykke udstyr, altså om det pt er booket eller ej.

Vil du have det hele med, kommer du ikke uden om at bruge sub selects (eller midligtidige tabeller og flere sql sætninger).
Er det en skole opgave og står der intet om mysql version, så har mysql fra ihvertfald version 4.0 støttet sub-selects, så det er ganske lovligt med mysql.

God fornøjelse med opgaven.



Hej Jonatan

SQL'en:

SELECT id, navn, max(start <= 170 AND slut >= 170) AS booket
FROM udstyr
LEFT JOIN events ON id = udstyr_id
GROUP BY id
ORDER BY id ASC

Virker perfekt, mange tak. Jeg har allerede brugt lign. i samme SQL hvor denne skal bruges, bare med MIN(), så jeg ved ikke helt hvorfor jeg ikke så den komme ;), men mange tak for lige at åbne mine øjne.

anyways, det er til en del i et større booking/kalender/medlems system jeg er ved at lave til Fotoklubben ved DTU :)

PS: Angående de udvikler point (har ingen anelse om 20 point er mange, hvad de bruges til eller noget) men jeg synes ikke at jeg kunne give dig dem, så hvis du vil have dem skriv lige et svar.

/Martin



t