webForumDet fria alternativet

Hämta senast ändrad sida i wiki

Databaser & SQL

6 svar · 311 visningar · startad av Pace

Medlem sedan juni 20019 024 inlägg
Frågan#1

Jag har en liten wiki där jag behöver få fram den senast ändrade sidan. Varje wikisida är kopplad till en viss version. Såhär ser datastrukturen ut (generellt):

[b]wikipages[/b]
pageid - int(5) auto_increment
title - varchar(75)

[b]wikirevisions[/b]
revisionid - int(5) auto_increment
pageid - int(5)
content - mediumtext
postdate - datetime

wikipages.pageid är kopplad med wikirevisions.pageid.

När man exempelvis går in på sidan "Startsida" (wikipages.title = 'Startsida'), körs därefter en extra sql-fråga som hämtar senaste versionen (postdate DESC) från wikirevisions som innehåller den senaste versionen av sidan.

Jag har försökt med något i stil med nedanstående fråga för att hämta en enkel lista över senast ändrade sidor, men det fungerar ju icke.

SELECT
   title, postdate
FROM
   wikipages
INNER JOIN wikirevisions ON
   wikirevisions.pageid = wikipages.pageid
GROUP BY
   wikirevisions.pageid
ORDER BY
   postdate DESC

Eller kanske det är så att jag måste skapa ett extra fält (wikipages.revisionid) där jag lagrar vilken version som är den aktuella?

Medlem sedan dec. 200012 464 inlägg
#2
select title, hwpr.content
from wikipages wp join wikirevisions lwpr on wp.pageid = lwpr.pageid
join wikirevisions hwpr on lwpr.pageid = hwpr.pageid     
and lwpr.postdate < hwpr.postdate
group by title, hwpr.content
having count(*) = 1
Medlem sedan juni 20019 024 inlägg
#3

Perfekt, tack så mycket LarsG! :)

En liten korrigering dock:

select title, hwpr.content
from wikipages wp join wikirevisions lwpr on wp.pageid = lwpr.pageid
join wikirevisions hwpr on lwpr.pageid = hwpr.pageid     
and lwpr.postdate <[u][b][red]=[/red][/b][/u] hwpr.postdate
group by title, [u]lwpr[/u].content
having count(*) = 1

Annars visas inte de sidor som enbart har en (1) version.

r) Ytterligare korrigering inlagd (hwpr --> lwpr).

Medlem sedan dec. 200012 464 inlägg
#4

Kan det där verkligen fungera om det finns mer än två revisioner?

Nej, det gör det inte.

select title, lwpr.content, lwpr.revisionid, lwpr.postdate 
   from wikipages wp join wikirevisions lwpr 
  on wp.pageid = lwpr.pageid
   join wikirevisions hwpr 
   on lwpr.pageid = hwpr.pageid 
group by title, lwpr.content, lwpr.revisionid, lwpr.postdate 
having lwpr.postdate = max(hwpr.postdate)
Medlem sedan juni 20019 024 inlägg
#5

Jo, det fungerade utmärkt (med lite modifikation). :e

SELECT
   title, hwpr.postdate, hwpr.changes, name
FROM
   wiki_pages wp
JOIN
   wiki_pagerevisions lwpr ON wp.pageid = lwpr.pageid
JOIN
   wiki_pagerevisions hwpr ON lwpr.pageid = hwpr.pageid AND lwpr.postdate [red]<=[/red] hwpr.postdate
INNER JOIN
   users ON users.userid = hwpr.userid
GROUP BY
   title, lwpr.[red]postdate[/red]
HAVING COUNT(*) = 1
ORDER BY
   [red]postdate DESC[/red]
LIMIT 20
Medlem sedan dec. 200012 464 inlägg
#6

Nej, eftersom din group by är helt fel så är det faktiskt slumpmässigt vilka värden du får i changes.

Det är bara Mysql som godkänner den frågan.

Medlem sedan juni 20019 024 inlägg
#7

LarsG skrev:

Nej, eftersom din group by är helt fel så är det faktiskt slumpmässigt vilka värden du får i changes.

Okej, på vilket sätt då? Menar du för att jag grupperar med ett datumfält?

LarsG skrev:

Det är bara Mysql som godkänner den frågan.

Jo, det är jag införstådd med. MySql är det som används så det är inga problem.

268 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)