[PHP/MySQL] Query resultaat inconsequent?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • CAP-Team
  • Registratie: April 2000
  • Laatst online: 11:50

CAP-Team

XBL: CAPTeam

Topicstarter
Ik heb een soort van startpagina, en daarop wil ik een lijstje kunnen tonen van mensen die vandaag jarig zijn en een lijstje van mensen die deze week jarig zijn (en die nog niet jarig zijn geweest).

Ik heb een tabel gemaakt met daarin een ID, een naam en een geboortedatum.

Daarvoor heb ik onderstaand stukje code voor geschreven:

PHP:
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
26
27
28
29
30
31
32
33
mysql_connect($host, $user, $password);
mysql_select_db("startpage"); 

echo "<B>Vandaag jarig:</B><BR>\n";
$query = "select Naam, YEAR(NOW())-YEAR(Datum) as 'Leeftijd' from Verjaardagen WHERE RIGHT(NOW(),5) = RIGHT(Datum,5);";
$result = mysql_query($query) or die ("Whoops");  
$number_of_rows = mysql_num_rows($result);

if ($number_of_rows == 0)
  echo "Er is vandaag niemand jarig.<BR>\n";
else
  {
    while($obj = mysql_fetch_object($result))
      { 
        echo "$obj->Naam ($obj->Leeftijd)<BR>\n"; 
      }
  }
  
echo "<HR>\n<B>Komende week jarig:</B><BR>\n";

$query = "SELECT Naam, DAYOFMONTH(Datum) as 'Dag', MONTH(Datum) as 'Maand' FROM Verjaardagen WHERE WEEK(Datum,0) = WEEK(NOW(),0) AND RIGHT(Datum,5) > RIGHT(NOW(),5);";
$result = mysql_query($query) or die ("Whoops");  
$number_of_rows = mysql_num_rows($result);

if ($number_of_rows == 0)
  echo "Er is deze week niemand jarig.<BR>\n";
else
  {
    while($obj = mysql_fetch_object($result))
      { 
        echo "$obj->Naam ($obj->Dag-$obj->Maand)<BR>\n"; 
      }
  }


Nu is het zo dat het lijstje van mensen dat deze week jarig is nogal inconsequent is. Er is namelijk één persoon die was gisteren jarig, maar die kwam soms wel, maar soms ook niet in het lijstje te staan van mensen die deze week jarig zijn.

Is dit een browser-probleem (cache?) of is er iets met mijn query niet helemaal in orde :?

Microsoft Surface Pro 6 | Samsung Galaxy S21FE | XBOX Series X


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Je vergelijkt trouwens wel het week nummer van dit jaar met het weeknummer van het geboortejaar, en deze hoeven niet overeen te komen. Daarnaast vind ik het gebruik van right erg vies mbt data. gebruik gewoon day en month.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • mr.inno
  • Registratie: April 2003
  • Laatst online: 14-09 18:19
sorry heb nog niet naar je code gekeken maar janoz zij wat en ik dacht daarop mischie de oplossing voor je te hebben :

als je te werkt gat met week nummers dan werkt het niet. want dat gaat gewoon nooit altijd goed. zie janoz post.

oplossing.

grab vandaag. greb dag van de week.
check hoeveel dagen er voor deze dag zitten. en hoeveel na.

dan select alle geboorte dagen. die van (nu - (aantal dagen tot begin van week)) tot (nu+(aantaldagen tot eind van week)) lopen.

dan heb je dus alle jarig die deze week jarig zijn.. (dus de in dit jaar hun verjaardag deze week vieren.)
nou en met die zelfde getallen kun je dus ook selecteren wie nog jarig meotzijn deze week en wie al jarig is of is geweest.

inno


Acties:
  • 0 Henk 'm!

  • CAP-Team
  • Registratie: April 2000
  • Laatst online: 11:50

CAP-Team

XBL: CAPTeam

Topicstarter
Janoz schreef op 30 July 2003 @ 11:04:
Je vergelijkt trouwens wel het week nummer van dit jaar met het weeknummer van het geboortejaar, en deze hoeven niet overeen te komen. Daarnaast vind ik het gebruik van right erg vies mbt data. gebruik gewoon day en month.
toch is het vreemd dat ik dan de ene keer wel die persoon als resultaat krijg en de andere keer niet (en ik ben op de hoogte van het feit dat de weeknummers niet altijd overeenkomen) ;)

Maar inderdaad met maand en dag werken zal stukken netter zijn. Daar moet ik dus nog even aan sleutelen.

Microsoft Surface Pro 6 | Samsung Galaxy S21FE | XBOX Series X