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?

Alvast bedankt!
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?

Bedankt in ieder geval voor je reactie!

Reageren