2008-10-31, 09:03
#1
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?
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?