Vinnaren i pepparkakshustävlingen!
2008-10-31, 09:03
  #1
Medlem
Har ett litet problem. Jag har en databas med låt säga nyhetsartiklar. Databasen har följande kolumner

id nyhetsid index status rubrik artikel


id = Unikt id som får ett nytt id från databasen när jag skapar en ny nyhetsartikel
nyhetsid = Unikt id för en artikel (en story)
index = Unik räknare som bestämmer vilken nyhets som sköter sorteringen
status = Har en 1:a om artikeln är publicerad eller en 0:a om den är i redigeringsläge. (Detta gör att man kan redigera nyheten som admin och förhandsgranska den innan man publicerar den)
rubrik = Nyhetsartikelns rubrik
artikel = Nyhetens HTML artikel

I databasen nedan har jag två olika artiklar varav en är redigerad två ggr samt en rad som är i redigeringsläge.

id nyhetsid index status rubrik artikel
1 1 1 1 Nyhet 1 Första
2 1 2 1 Nyhet 1 Andra (Redigerad)
3 1 4 0 Nyhet 1 Tredje i redigeringsläge
4 4 3 1 Nyhet 2 HTML

I vanligt läge:
När jag ska lista artiklarna så vill jag hämta de unika nyhetsid som har det högsta indexen och som har status 1

################################
ID: 4
Rubrik: Nyhet 2
Artikel: HTML
index: 3
################################
ID: 2
Rubrik: Nyhet 1
Artikel: Andra (Redigerad)
index: 2
################################

I redigerings läge:
När jag ska lista artiklarna så vill jag hämta de unika nyhetsid som har det högsta indexen och som har status 0

################################
ID: 3
Rubrik: Nyhet 1
Artikel: Tredje i redigeringsläge
index: 4
################################
ID: 4
Rubrik: Nyhet 2
Artikel: HTML
index: 3
################################

Jag kör nu med:

SELECT * FROM
(SELECT * FROM tabell) AS t1
RIGHT JOIN
(SELECT nyhetsid, MAX(index) AS index, MAX(id) AS id FROM tabell GROUP BY nyhetsid) AS t2
ON t1.id = t2.id ORDER BY t1.index DESC

Men detta fungerar inte som jag vill. I JOIN satsen måste jag sätta id under en funktion eller under GROUP BY annars kan jag inte hämta id datan.

Det jag egentligen vill göra är:

SELECT * FROM
(SELECT * FROM tabell) AS t1
RIGHT JOIN
(SELECT nyhetsid, MAX(index) AS index FROM tabell WHERE status = 1 GROUP BY nyhetsid) AS t2
ON t1.id = t2.id ORDER BY t1.index DESC

Men detta fungerar ju så klart inte. För då hämtar den inte datan i id kolumnen
"Invalid column name 'id'"

Någon som har något förslag?
Citera
2008-10-31, 10:15
  #2
Medlem
C - Js avatar
du kan inte joina på t2.Id eftersom den inte ingår i din sub-fråga. lägg till Id till frågan
(SELECT nyhetsid, MAX(index) AS index FROM tabell WHERE status = 1 GROUP BY nyhetsid) AS t2
Du får nog gruppera på nyhetsId och Id, tror jag.
Citera
2008-10-31, 10:18
  #3
Medlem
Fixade det såhär

SELECT * FROM
(SELECT * FROM tabell) AS t1
RIGHT JOIN
(SELECT nyhetsid, MAX(index) AS index FROM tabell WHERE status = 1 GROUP BY nyhetsid) AS t2
ON t1.nyhetsid = t2.nyhetsid AND t1.index = t2.index ORDER BY t1.index DESC
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback