Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
if id.tabel[a] not exist then print("nr ",a,"ontbreekt");
}
zo iets? een beetje debuggen enz.
wat je ook kan doen is niet toe staan om te verwijderen... moven naar trash...
zoals hier
[ Voor 32% gewijzigd door Duinkonijn op 01-05-2003 03:48 ]
Het is makkelijk om iemand zijn negatieve eigenschappen te benoemen, maar kan je ook de positieve eigenschappen benoemen?
Wat je wel zou kunnen doen is zoeken naar alle records waarvoor een record met ID+1 niet bestaat. Dan krijg je minimaal een idee waar de gaten zitten.
dusty is op missionaris pad: how to make a good programmer
[ Voor 15% gewijzigd door Goodielover op 01-05-2003 08:57 . Reden: reactie op dusty toegevoegd ]
Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Verwijderd
Of alle ID's in een array zetten, en dan met een for loop van 1 tot [grootste id] met in_array() controleren.
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
| $ID = array(); $missing = array(); $i=0; // Zet alle ID's in de $ID array // ... // Haal het hoogste ID op: (thxs Obliterator) $query = "SELECT MAX(ID) FROM tabel" // Zet het resultaat in $ID_max // Controleer alles nu: for( $a=1; $a<=$ID_max; $a++ ) { if( !in_array( $a,$ID ) ) { // ID $a bestaat niet $missing[$i]=$a; $i++; } } // Nu staan alle ID's die verwijderd zijn in de $missing array print_r( $missing ); |
[ Voor 92% gewijzigd door Verwijderd op 01-05-2003 11:24 ]
Misschien kun je uitleggen waarom je aanneemt dat er geens ID's missen?
PS: de Maximale ID kun je in MySQL volgens mij makkelijker (efficienter) vinden door de query:
1
| SELECT MAX(ID) FROM tabel; |
[ Voor 22% gewijzigd door Obliterator op 01-05-2003 11:18 ]
Dan moet je je misschien afvragen waar ID's eigenlijk voor zijnGrijze Vos:
Dusty> omdat ik er vanuit ga dat er geen missende ID's zijn in die tabel. Omdat door user-intervention dat dus wel kan gebeuren, wil ik weten welke ID's verwijdert zijn, om dit verder af te kunnen handelen.
ID's zijn voor identificatie voor het record in de database. Dit om relaties te leggen, en om in je programmatuur duidelijk te hebben "over welk record je het hebt". Je moet daar dus ook geen enkele semantische betekenis aan geven, want dan gebruik je het ID voor andere zaken dan waarvoor het bedoeld is, en kan je dus tegen beperkingen aanlopen. Als je tegen zo'n beperking aanloopt is het dus verstandig je af te vragen waarom zo'n "beperking" er eigenlijk is, gevolge de gedachte waarom je het dan niet op die manier op moet lossen.
Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz
Ik zit dus met het een tabel met posts van mijn forum, nu wil je ook een functie gebruiken om te kijken of je een bepaald draadje wel/niet hebt gelezen. Ik heb gekozen om bij te houden welke posts een user al gelezen heeft. Dit slaat ie op in de user session, in een array. Zitten nog wat kleinigheden in, om dit array niet al te groot te laten worden. Bijvoorbeeld: het eerste element van het array, geeft aan dat alle posts met een lager ID al gelezen zijn. Als dan bijvoorbeeld mijn array begint met 1,2,3,4,7,8,9 dan kan dat dus vervangen worden door 4,7,8,9. Ik wilde absoluut niet de "gelezen-status" verbinden met de tijd oid, want naar mijn mening, moet een post pas gemarkeerd worden als gelezen, als je hem daadwerkelijk leest, of expliciet aangeeft, dat je hem gelezen hebt. (dmv een "mark read" functie uiteraard).
Nu werkt dit alles prima, ook boards waar je geen access op hebt, markeer ik gelezen, zodat het array niet mega groot wordt.
Alleen, stel dat er nou een ID missing is, dan kan ie die nooit updaten, dus ik moet een routine hebben die dat even voor me naloopt. Duidelijk genoeg zo? Overigens is het niet mijn bedoeling om hier mijn ontwerpsbeslissingen onder de loep te nemen, als ik daar vragen over heb, stel ik die wel. Aangezien we hier aannemen dat iedereen voldoende research zelf doet, alvorens een vraag te stellen, mogen jullie ook aannemen dat ik echt wel heb nagedacht over hoe ik mijn systeem opzet.
Nou, terug naar het probleem, ik heb enkele ideeen nog in mijn hoofd zitten:
1. Maak een tijdelijke tabel aan, met alle IDs in de betreffende range, maak een join met de post-tabel, met een NOT IN/ NOT EXIST van de post tabel. (dit werkt, maar is heel ranzig.)
2. Pak gewoon alle ID's in de range, en laat php maar uitvogelen welke missing zijn. (misschien wel de beste oplossing).
3. Pak de missing ID's uit wat je in de session hebt taan, en check of deze wel echt in de database zitten (en dus gelezen kunnen worden). (enigzins goeie optie, maar dan moet hier wel een verdomd goeie pre-conditie aan vast zitten, anders kan dit wel veel overhead meebrengen).
Belangrijk is uiteraard, wat brengt de minste overhead mee. Ik denk zelf de tweede, en zal dat zo maar eens gaan proberen... Als iemand anders nog ideeen heeft over een vierde oplossing.. graag..
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Bij optie 3 zou je teveel queries moeten gaan afvuren om te bepalen welke ID's missen.
It’s nice to be important but it’s more important to be nice