[SQL] Nieuw toegevoegde presentaties weergeven
Door middel van onderstaande query probeer ik te controleren op nieuw toegevoegde (inactieve) presentaties.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
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!
Gewijzigd op 30/03/2011 18:00:50 door Arjan -
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
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)?
Gewijzigd op 30/03/2011 18:45:22 door Arjan -
Quote:
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.
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!
Gewijzigd op 30/03/2011 20:07:16 door Arjan -