[SQL] Jobbig sats med multipla joins

Permalänk
Medlem

[SQL] Jobbig sats med multipla joins

Tjena!

Går direkt på problemet.. Jag har tre tabeller: classes, studentfiles och studentnews. Varje tabell innehåller varsin id-kolumn. I studentnews respektive studentfiles sparas sedan nyheter och filer som måste tillhöra någon klass i classes-tabellen. Detta specifieras i type_id i båda tabellerna (fråga mig inte varför jag valde det kolumnnamnet ).

Nu vill jag hämta ut alla nyheter och alla filer som hör till en och samma klass, och sedan sortera dem gemensamt (så att den senast postade nyheten/filen kommer överst). Kolumnerna för när de är sparade/uppladdade heter uploaded i studentfiles och posted i studentnews.

Såhär långt har jag kommit:

SELECT classes.id AS id, classes.name, studentnews.content FROM classes LEFT JOIN studentnews ON classes.id = studentnews.type_id WHERE studentnews.type_id='3' UNION SELECT classes.id AS id, classes.name, studentfiles.filename FROM classes LEFT JOIN studentfiles ON classes.id = studentfiles.type_id WHERE studentfiles.type_id='3'

Dock misstänker jag att UNION är helt fel väg att gå.

Behöver hjälp ganska akut. Uppskattar all hjälp jag kan få.

Permalänk
Medlem

Re: [SQL] Jobbig sats med multipla joins

UNION är nog rätt väg att gå... men jag är mer van vid att select:a från flera tabeller istället för att köra join. Är väl en fråga om tycke och smak skulle jag tro.

För att sortera efter datum så måste det också tas med, typ så här:

SELECT classes.id, classes.name, studentnews.content AS description, studentnews.date AS date FROM classes, studentnews WHERE studentnews.type_id='3' AND studentnews.type_id = classes.id UNION SELECT classes.id, classes.name, studentfiles.filename AS description, studentfiles.date AS date FROM classes, studentfiles WHERE studentfiles.type_id='3' AND classes.id = studentfiles.type_id ORDER BY date

Visa signatur

Cheer up m8 :) Honda power!
"Om man tänker en tanke, så är den tanken inte den tanke man tror att man tänker. Utan det är den tanke som får en att tro att man tror den tanke man tror att man tänker."

Permalänk
Medlem

Tack så mycket! Din kod fungerade hur bra som helst.

En fråga dock, hur ska jag skilja på om en rad i resultatet kommer ifrån studentfiles eller studentnews?

Permalänk
Medlem

Kul att det fungerade!

För att få med typen av resultat kan queryn utökas t.ex. så här:

SELECT classes.id, classes.name, studentnews.content AS description, studentnews.date AS date, 'newsItem' FROM classes, studentnews WHERE studentnews.type_id='3' AND studentnews.type_id = classes.id UNION SELECT classes.id, classes.name, studentfiles.filename AS description, studentfiles.date AS date, 'file' FROM classes, studentfiles WHERE studentfiles.type_id='3' AND classes.id = studentfiles.type_id ORDER BY date

Sista kolumnen i resultatet kommer då innehålla strängen "newsType" om det är en nyhet och strängen "file" om det är en fil.

Dom här grejerna är rätt basic egentligen så jag rekomenderar dig att du studerar SQL lite närmare.

Visa signatur

Cheer up m8 :) Honda power!
"Om man tänker en tanke, så är den tanken inte den tanke man tror att man tänker. Utan det är den tanke som får en att tro att man tror den tanke man tror att man tänker."

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Klabbe
Dom här grejerna är rätt basic egentligen så jag rekomenderar dig att du studerar SQL lite närmare.

Ja, det är sant. Jag går databashantering för närvarande så det kommer nog bli bättring på mysql-fronten framöver. Jag är väl lite av en nybörjare, trots att jag sysslat med php/mysql ett ganska bra tag nu. Jag tycker att mysqls dokumentation är inte i närheten lika bra som php-manualen vad gäller t.ex. exempel och sådant.