Door
Arjan -
op 30-03-2011 17:58
gewijzigd op 30-03-2011 18:00
1.927 views
Hey,
Door middel van onderstaande query probeer ik te controleren op nieuw toegevoegde (inactieve) presentaties.
SELECT
bedrijf_id, MAX(presentatie_id)
FROM
presentaties p
WHERE
presentatie_actief = '0'
AND presentatie_toegevoegd >
(
SELECT presentatie_toegevoegd
FROM presentaties
WHERE presentatie_actief = '1'
AND bedrijf_id = p.bedrijf_id
)
GROUP BY
bedrijf_id
ORDER BY
presentatie_id DESC
Wat dus de bedoeling is, is dat binnen de tabel "presentaties" gekeken wordt of er nieuwe presentaties zijn toegevoegd. Elke gewijzigde presentatie wordt als een nieuwe presentatie toegevoegd om zodoende gemakkelijk terug te kunnen naar eerder opgeslagen presentaties.
Met bovenstaande query werkt het allemaal goed, behalve wanneer er maar één presentatie van een bedrijf in de database staat en deze op inactief staat (presentatie_actief = '0'). Dit is te wijten aan de conditie "presentatie_toegevoegd > .....". Hier wordt namelijk niet aan voldoen in het geval van één inactieve presentatie.
Maar ik heb vooralsnog geen oplossing voor handen voor dit probleem. Heeft iemand enig idee hoe ik deze query ook werkend kan krijgen voor één inactieve presentatie?
Ja en wat wil je nu dan, want je blaat een eind weg, maar je verteld ons niet duidelijk genoeg wat je nu als resultaat verwacht.
Je spreekt je ook nog eens tegen "Elke gewijzigde presentatie wordt als een nieuwe presentatie toegevoegd"
Dat kan niet... als een presentatie gewijzigd wordt dan zit ie dus al in de database tabel, als je deze opnieuw zal toevoegen zal dat niet moeten kunnen.
En bekijk in vredesnaam ook je query eens met EXPLAIN, want deze query is niet om vooruit te branden
Poehee, wat zijn wij weer agressief vandaag. En ik blaat geen eind weg, aangezien ik duidelijk heb aangegeven dat elke presentatie dat gewijzigd wordt door de eigenaar, een nieuwe record krijgt in de database om zodoende de controle te houden over wijzigingen in presentaties. Als je te eigenwijs bent om dit te snappen dan vraag ik je niet (meer) te reageren. Of ga lekker een paar uurtjes in de zandbak spelen, wellicht koel je dan weer een beetje af!
Als resultaat verwacht ik een getal (en later ook meerdere velden) dat het aantal nieuwe en gewijzigde presentaties weergeeft.
Dus een nieuw bedrijf X voert een presentatie in, deze bevat een waarde presentatie_actief = 0.
Bedrijf Y heeft al een presentatie toegevoegd, maar wil wijzigingen aanbrengen in haar presentatie. Na het wijzigen wordt een nieuwe record toegevoegd met de huidige timestamp (DATETIME veld in mysql) en een status presentatie_actief = '0'.
Deze wijzigingen cq toevoegingen wil ik met behulp van een query ophalen. Dus alle presentaties waarbij de status presentatie_actief op 0 staat.
En ik weet dat de query niet al te best presteert met grote hoeveelheden aan data, maar ik kan op dit moment geen betere query verzinnen (vandaar dus ook deze vraag)?
ik duidelijk heb aangegeven dat elke presentatie dat gewijzigd wordt door de eigenaar, een nieuwe record krijgt in de database om zodoende de controle te houden over wijzigingen in presentaties
Je kan een presentatie die in de database staat niet nog eens toevoegen dat zal moeten leiden tot duplicate key, als dat niet het geval is steekt het niet goed in elkaar, zoook je query niet goed is.
Zo en nu heb je toch zelf opgeschreven hoe de query er in principe uit zal moeten zien. Aanschouw het nog maals en produceer een query die wel doet wat je wilt.
Kijk: De eigenaar (bedrijf) van een presentatie moet de mogelijkheid hebben om een bestaande presentatie te wijzigen. Echter moeten deze wijzigingen wel eerst goedgekeurd worden om deze presentatie op de website weer te geven. Nu leek het mij handig om de gewijzigde presentatie als een nieuw record in de database toe te voegen om controle te houden over alle presentaties. Elke presentatie is gekoppeld aan één bedrijf, waardoor in de database meerdere presentaties aan een bedrijf gekoppeld zijn, waarbij echter maar één presentatie actief is.
Ik begrijp dat normaal gesproken een wijzigingen in een presentatie gewoon een UPDATE query nodig heeft om de wijzigingen door te voeren, maar ik wil juist die extra controle hebben om wijzigingen door bedrijven niet direct zichtbaar te laten zijn op de website.
Hoe kan ik dit op een andere manier doen dan? Want volgens mij is dit de eenvoudigste en effectiefste methode of zie ik het verkeerd? Of kan ik het beste met een parent_id werken, echter zie ik daar nu de voordelen niet van in?