aftrekken in tabel wekt niet of slecht

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sam Smekens

Sam Smekens

02/06/2009 21:09:00
Quote Anchor link
Ik probeer het volgende te doen: gebruikers kunnen 'VIP' worden die vip is bepaald in dagen. De ene heeft 20 dagen vip de andere 30. Nu elke dag moet er 1 dag van die vipdagen af. dus mensen met 20 hebben dan 19 mensen met 30, 29 dagen. daarvoor maakte ik het volgende;
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
include('../connect.php');
$select = "SELECT * FROM gebruikers";
$query = mysql_query($select);
 while($rij = mysql_fetch_object($query)) {
$isvip = $rij->isvip;
if($isvip >=1){
mysql_query("UPDATE gebruikers SET isvip = isvip - 1 ");
}
else{
    //niets
    }
}


?>

de ene keer werkte het, de andere keer niet. Ik ben beginnen zoeken, rondvragen googlen niets gevonden. wat mijn probleem was, was dat er soms -2 werd gedaan(in de db en met het script dat hierboven staat) nu 5 min geleden voor deze post ontdekte ik dat er nu wel maar eentje werd afgetrokken dus -1. dat kwam doordat er nu maar 1 lid VIP was. dus elk lid dat vip is trekt hij het aantal van af. 1 lid doet hij vipdagen -1 10 leden doet hij vipdagen -10 6545456 leden doet hij -6545456. hoe kan ik dit verhinderen?

Sorry voor heel dit verhaal. maar zo moeten jullie niet vragen "wees iets gespicifieerder"

Alvast bedankt!
 
PHP hulp

PHP hulp

29/03/2024 16:33:46
 
Bo az

Bo az

02/06/2009 21:20:00
Quote Anchor link
Je query bevindt zich in een while, voor ieder record wordt deze dus uitgevoerd. En omdat je geen WHERE hebt op gegeven wordt de query op ieder record toegepast. Dat verklaart ook wat je zegt: "10 leden doet hij vipdagen -10".

Kortom, voer de query slechts éénmaal uit of geef een where op, hoewel het dan kan zijn dat je erg veel queries uit gaat voeren wat weer inefficiënt is.

Je kan de queries natuurlijk ook combineren, iets als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
UPDATE gebruikers SET isvidp=isvip-1 WHERE isvip>1


Overigens vraag ik me af of er geen handiger manier is, zoals bijvoorbeeld de eind datum opslaan? Of begin datum en aantal dagen zodat je de eind datum kan berekenen?
 
Sam Smekens

Sam Smekens

02/06/2009 21:26:00
Quote Anchor link
Boaz schreef op 02.06.2009 21:20:
Je query bevindt zich in een while, voor ieder record wordt deze dus uitgevoerd. En omdat je geen WHERE hebt op gegeven wordt de query op ieder record toegepast. Dat verklaart ook wat je zegt: "10 leden doet hij vipdagen -10".

Kortom, voer de query slechts éénmaal uit of geef een where op, hoewel het dan kan zijn dat je erg veel queries uit gaat voeren wat weer inefficiënt is.

Je kan de queries natuurlijk ook combineren, iets als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
UPDATE gebruikers SET isvidp=isvip-1 WHERE isvip>1


Overigens vraag ik me af of er geen handiger manier is, zoals bijvoorbeeld de eind datum opslaan? Of begin datum en aantal dagen zodat je de eind datum kan berekenen?

die datums, heb ik al meerdere keren aan bod gekregen waaroim begin je niet met start datum einddatum en een NOW().. maar das dan toch onhandig als je af en toe +7 moet doen door een of andere reden :s? soms hou ik wedstrijd waardoor leden dan extra vipdagje kunnen winnen en nu is het handig als ik het vipdagje +1 of +9 kan doen.

& zou ik het volgende niet kunnen doen?:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?
include('../connect.php');

mysql_query("UPDATE gebruikers SET isvip = isvip-1 WHERE isvip >= 1");

?>
(gewoon dit)

********Ja boaz! twerkt thnx je bracht me op een ide en
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?
include('../connect.php');

mysql_query("UPDATE gebruikers SET isvip = isvip-1 WHERE isvip >= 1");

?>
werkt! **************
Gewijzigd op 01/01/1970 01:00:00 door Sam Smekens
 
Bo az

Bo az

02/06/2009 22:03:00
Quote Anchor link
Sam Smekens schreef op 02.06.2009 21:26:
maar das dan toch onhandig als je af en toe +7 moet doen door een of andere reden :s?


Met data/datums, kan je ook gewoon rekenen, kijk eens in de handleiding:
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-add

Keuze van juiste data typen en flexibele methoden is belangrijk. Vaak levert dit uiteindelijk voordelen op, bijvoorbeeld als je iets gaat uitbreiden.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.