In onderstaande tabel "paths" houd ik van elke bezoeker het klikpad door de site bij. "vid" Staat hierbij voor visitor id. Van elke vid staan dus een x aantal rijen in de paths tabel:
Voor de duidelijkheid: ik wil hier de records met vid 15, 9 en 5 laten staan. De records met vid 1 en 2 moeten verwijderd worden; het liefst met maar 1 delete query. Ik heb alleen geen idee hoe je zo'n query op moet bouwen: het aantal bezoekers (lees: aantal unieke vid's) is onbekend en ook het aantal records per vid.
Ik weet het alleen maar op te lossen mbv meerdere queries:
code:
Omdat ik de tabel niet te groot wil laten worden, wil ik van een maximaal aantal bezoekers hun klikpad bijhouden. Als voorbeeld hier: van de laatste drie bezoekers. Via een cronjob wil ik de eerdere bezoeken uit de tabel verwijderen.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| +-----+---------+---------+ | vid | value a | value b | +-----+---------+---------+ | 1 | ..... | ....... | +-----+---------+---------+ | 2 | ..... | ....... | +-----+---------+---------+ | 2 | ..... | ....... | +-----+---------+---------+ | 2 | ..... | ....... | +-----+---------+---------+ | 5 | ..... | ....... | +-----+---------+---------+ | 9 | ..... | ....... | +-----+---------+---------+ | 9 | ..... | ....... | +-----+---------+---------+ | 15 | ..... | ....... | +-----+---------+---------+ | 15 | ..... | ....... | +-----+---------+---------+ | 15 | ..... | ....... | +-----+---------+---------+ | 15 | ..... | ....... | +-----+---------+---------+ |
Voor de duidelijkheid: ik wil hier de records met vid 15, 9 en 5 laten staan. De records met vid 1 en 2 moeten verwijderd worden; het liefst met maar 1 delete query. Ik heb alleen geen idee hoe je zo'n query op moet bouwen: het aantal bezoekers (lees: aantal unieke vid's) is onbekend en ook het aantal records per vid.
Ik weet het alleen maar op te lossen mbv meerdere queries:
- select distinct het aantal vids
- sorteer aflopend op vid (15, 9, 5, 2, 1)
- stop de vid's in een array in PHP
- kijk wat de derde vid is (in dit geval 5)
- delete from paths where vid < 5
"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."