[PHP/MYSQL] Nieuws systeem met revision control

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DiLDoG
  • Registratie: Oktober 2002
  • Laatst online: 18-09 08:45
Ik ben bezig met een nieuws systeempje waarbij ik graag revision control zou hebben. Dus als iemand een bepaald bericht bewerkt, dat de oude text bewaard blijft. Ik weet dat ik bijvoorbeeld de oude text in een apparte table kan opslaan, maar ik zou het weergeven van nieuws graag met zo min mogenlijk queries doen.


Ik heb nu

int(6)id
int(6)parentid
timestamptimestamp
textcontent



id=1
parentid=0
timestamp=05-01-13 20:45:04
content='Dit is het eerste bericht'

id=2
parentid=0
timestamp=05-01-13 20:32:21
content='Dit is het tweede bericht'

id=3
parentid=1
timestamp=05-01-14 02:11:54
content='Dit is het eerste bericht maar dan aangepast'

id=4
parentid=1
timestamp=05-01-14 03:10:18
content='Dit is het eerste bericht maar dan nog een keer aangepast'


Maar nu moet ik dus eerst
SELECT * WHERE `parentid` = 0
en daarna
SELECT * WHERE `parentid` = $id ORDER BY `timestamp` DESC LIMIT 0,1

Heeft er iemand suggesties? of een hele andere manier om dit te doen?

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Ik zou gaan voor 2 tabellen... 1 tabel met daadwerkelijke nieuws-items, en een tabel met versies. Als iemand dus de text bewerkt, wordt dat een nieuwe versie in je versie tabel. Om de nieuwste versie op te vragen wordt de query dan ongeveer zoiets:

code:
1
2
3
4
5
6
7
SELECT version.title, version.content 
FROM articles 
LEFT JOIN version 
ON (article.id = version.id)
WHERE article.id = *id*
ORDER BY version.versionnumber DESC
LIMIT 1

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • DiLDoG
  • Registratie: Oktober 2002
  • Laatst online: 18-09 08:45
hmm das ook nog een idee :)
denk dat ik het zo maar ff ga proberen dan.

Acties:
  • 0 Henk 'm!

  • Breuls
  • Registratie: Januari 2000
  • Laatst online: 19-07 11:22

Breuls

Bad Wolf

Alle oude data opslaan in dezelfde tabel zorgt voor een hoop vervuiling van je tabel. Persoonlijk zou ik een backuptabel gebruiken waar je de oude data in gooit. :)

Acties:
  • 0 Henk 'm!

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Het bijhouden van history tables waarvan de inhoud bestaat uit kopieën van records vlak voor momenten van wijziging, kan op een doeltreffende manier via triggers. De vraag is alleen of mysql dat concept ondersteund.

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Je kunt ook meteen een generiek historiesysteem maken zodat je het ook voor andere systemen kunt gebruiken. Je zou bijvoorbeeld een tabel kunnen maken als:

historietable:
tablename -> de tabelnaam waarvan je de gegevens backupt
recordid -> de id uit de gegevens tabel
fieldname -> lijkt me duidelijk
date -> datum van backup o.i.d.

Je kan hiermee alle data eenvoudig opslaan, je kan dan 1 class maken waarmee je alle historie op kan slaan.

Ik zou de gegevens echter sowieso opslaan in de gegevenstabel omdat je dan nog veel eenvoudiger kunt ontwikkelen. Je kan dan namelijk zonde enige problemen velden toevoegen als je een beetje een flexibele invoer en uitvoerclasses gebruikt.

[ Voor 25% gewijzigd door djluc op 15-01-2005 12:11 ]

Pagina: 1