Wat hier dus wordt gedaan is eerst alles opvragen uit 'tabel', en vervolgens kijken of hier een dubbele waarde in zit (dus tijd = tijd en pagina = pagina), zoja dan moet hij de user toevoegen in de array, en vervolgens wordt er met behulp van implode() een query uitgevoerd met de betreffende users.
Nu is mijn probleem dat er ong. 100 records per minuut in die tabel zit, en ik deze pagina in een cronjob uitvoer die elke minuut wordt uitgevoerd. Is dit ook anders mogelijk, dus dat $sQuerySel niet hoeft worden toegepast, dus bijvoorbeeld met array's gewerkt kan worden. Ik heb wel het een en ander geprobeerd maar kwam er niet uit. De server draait onder PHP5, dus dat kan ook gebruikt worden.
Wat hier dus wordt gedaan is eerst alles opvragen uit 'tabel', en vervolgens kijken of hier een dubbele waarde in zit (dus tijd = tijd en pagina = pagina), zoja dan moet hij de user toevoegen in de array
Dat gebeurt volgens mij niet - hij leest gewoon van alle pagina's de users uit die er op een gegeven moment op zitten (of zoiets). Als hier een "dubbele waarde" in zou zitten, dan zou deze twee keer in het array staan (en je wilt eigenlijk dat dat array alleen maar leden bevatten die een "dubbele notering" hebben lijkt me ?).
Wat is precies de bedoeling, dan kunnen we het hierna eens over de optimalisatie ervan hebben .
Vanaf MySQL versie zoveel zijn geneste queries toegestaan, maar zo nieuw is jouw versie waarschjinlijk niet ?
SQL bevat ook een "HAVING" deel, dus er valt misschien wel een query te maken a la
Mja versie is 4.0.25, dat is redelijk nieuw, maar het doel van dit hele script is (had ik beter gelijk kunnen vertellen);
Als men 2 vensters naast elkaar draait, kan er op excact dezelfde tijd een bepaalde actie worden ondernomen, die je bijvoorbeeld slechts een maal in de 2 minuten kunt uitvoeren. Ik heb er zodoende een logger in geprutst, met de volgende structuur;
id integer (unique)
user integer
tijd integer (time()
pagina varchar
Is het dus zo dat er een dubbele waarde in zit (dus 2 maal of vaker iets op dezelfde tijd en pagina), dan moet de 'user' geselecteerd worden.
Van having heb ik opgezocht op mysql.com, kan er alleen weinig van vinden aangezien having ook een gewoon engels woord is in het vocabulair daar.
Stel je hebt form.php. Iemand heeft 2 vensters met actie.php open. Daarop staat een form, en de user klikt beide forms aan. De form gaat naar actie.php. Daar zet je dus zo'n timestamp in de db. Als er een user op actie.php komt, dan controleer je of er al zo'n timestamp in de db staat, en of deze timestamp minder dan 2 minuten oud is. Als dit zo is krijgt hij een bericht:
"Je kunt deze actie maar 1 keer per 2 minuten uitvoeren".
Venster 1 -> form submit -> actie.php -> geen timestamp in db -> maak er een.
Venster 2 -> form submit -> actie.php -> wel timestamp in db (van venster 1) -> bericht: "Je kunt deze actie maar 1 keer per 2 minuten uitvoeren".
Venster 1->form submit ->actie.php ->geen timestamp in db ->maak er een.
Venster 2->form submit ->actie.php ->wel timestamp in db (van venster 1)->bericht:"Je kunt deze actie maar 1 keer per 2 minuten uitvoeren".
<?php
// controleer of er een timestamp in db staat, zo ja, die(), zo nee, zet er een in, en sla het ID op:
$ID = mysql_insert_id();
usleep(100000); // andere waarde kan ook, maar ik denk dat dit genoeg is. Als dit niet zo is, zet er dan nog een 0 achter.
//controleer nog eens of er een timestamp in de db staat, en of het ID van de timestamp anders is dan $ID, als dit zo is betekent dat dat er vanuit een ander venster geprobeerd is tegelijkertijd een actie te doen, dus die(), anders, doe gewoon de actie
?>
<?php
// controleer of er een timestamp in db staat, zo ja, die(), zo nee, zet er een in, en sla het ID op:
usleep(100000);// andere waarde kan ook, maar ik denk dat dit genoeg is. Als dit niet zo is, zet er dan nog een 0 achter.
//controleer nog eens of er een timestamp in de db staat, en of het ID van de timestamp anders is dan $ID, als dit zo is betekent dat dat er vanuit een ander venster geprobeerd is tegelijkertijd een actie te doen, dus die(), anders, doe gewoon de actie