Data vergelijken in query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Chris

Chris

30/04/2007 23:59:00
Quote Anchor link
mod-edit::
Slechte topictitel
Heb titel veranderd, korter wist ik hem niet te maken, is hij zo goed dan? Chris

Ik wil iets maken dat uitzoekt bij welke spelers de laatste update datum in deze week is.

Per speler is dat heel simpel:

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
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?
include('config.php');  

$vraag = mysql_query("SELECT * FROM spelerstats WHERE id='$id'");
$rij = mysql_fetch_object($vraag);

$data = "SELECT CURDATE() AS datum";
$uitkomst = mysql_query($data);
while($row2 = mysql_fetch_assoc($uitkomst)){
    $datum = $row2['datum'];
}


$sql = "SELECT WEEKOFYEAR('$datum') AS week";
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)){
    $week = $row['week'];
}


$datum2 = $rij->updatedatum;
$sql2 = "SELECT WEEKOFYEAR('$datum2') AS week2";
$result2 = mysql_query($sql2);
while($row3 = mysql_fetch_assoc($result2)){
    $week2 = $row3['week2'];
}


if($week = $week2)
        echo 'Jah';
}
else{
        echo 'Neeh';
}

?>


Maar in die tabel (in de database) staan meerdere spelers, daarbij staat ook de laatste datum dat hij is geupdate.

Wat ik uiteindelijk wil is:
Hij moet alle spelers laten zien in een while met daarachter een knop als het nodig is om weer up te daten.

Ik dacht om het zo te doen:
Als je naar de pagina spelers.php (waar hij dus alle spelers in de while laat zien + eigenlijk de knop) gaat dat hij eerst checkt welke spelers geupdate moeten worden. Bij die spelers moet dan in de database dit verwerkt worden:

<a href='add-stats.php?id='".$rij->id."'><img src='Images/edit_16.png' border='0'/></a>

Zodat die knop achter de naam komt te staan.



Ik weet alleen niet hoe je dit moet doen.

Ik had die al geprobeert maar werkt niet:

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
15
<?
include('config.php');

$data = "SELECT CURDATE() AS datum";
$uitkomst = mysql_query($data);
while($row2 = mysql_fetch_assoc($uitkomst)){
    $datum = $row2['datum'];
}


$vraagje = mysql_query("SELECT * FROM spelerstats WHERE NOT WEEKOFYEAR(datum)=WEEKOFYEAR($datum)");
while($rij = mysql_fetch_object($vraagje)){
    echo $rij->datum;
}


?>


Waar deze fout bij komt:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in c:\domains\pro-studio.nl\wwwroot\chris\hattrick\stats\test2.php on line 5

Weet iemand hoe ik het kan oplossen?
Gewijzigd op 01/01/1970 01:00:00 door Chris
 
PHP hulp

PHP hulp

24/11/2024 10:15:15
 
Stefan van Iwaarden

Stefan van Iwaarden

01/05/2007 00:35:00
Quote Anchor link
die foutmelding komt omdat jij niet controleert of er resultaten zijn.

je zou bijv. dit kunnen doen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
if (mysql_num_rows($vraagje))
{

   while($rij = mysql_fetch_object($vraagje))
   {
   }
}

else
{
    echo('Er zijn geen resultaten');
}

?>


reden voor deze fout is dat je geen mysql_fetch_xxx over een lege query kunt halen.

Waarom gebruik je overigens assoc en tevens object door elkaar? Als je dan toch niet kan kiezen raad ik assoc aan aangezien dat de snelste is en object de langzaamste van de 4.
 
Chris

Chris

01/05/2007 10:10:00
Quote Anchor link
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
15
16
17
18
19
20
21
22
23
24
25
<?
include('config.php');

$data = "SELECT CURDATE() AS datum";
$uitkomst = mysql_query($data);
while($row2 = mysql_fetch_assoc($uitkomst)){
    $datum = $row2['datum'];
}


$vraagje = mysql_query("SELECT * FROM spelerstats WHERE NOT WEEKOFYEAR(datum)=WEEKOFYEAR($datum)");

if (mysql_num_rows($vraagje))
{

   while($rij = mysql_fetch_object($vraagje))
   {

   echo $rij->datum'<br>';
  
   }
}

else
{
    echo('Er zijn geen resultaten');
}


?>


Ik heb dus die controle er ingezet en hij zegt dus 'Er zijn geen resultaten'. Maar dat zouden er wel moeten zijn, aangezien er toch echt een speler in de datbase staat die nog moet worden geupdate.

Heb ik nog een fout in het script gemaakt of zo?
 
HaasOnline XX

HaasOnline XX

01/05/2007 11:01:00
Quote Anchor link
Ik wil je er even op wijzen dat je aan het rekenen met een afwijkende weeknummering. Ik bedoel, de weken waarop een computer gebaseerd is die zijn niet evenredig aan onze europeese weeknummering. Let hier wel even op, dit "fenomeen" doet zich enkele jaren niet voor en dan ineens weer we. (dit jaar, 2007, dacht ik niet BTW) Zoek voor meer informatie naar "Weeknummering vanaf zondag of vanaf maandag"

suc6
 
Chris

Chris

01/05/2007 11:36:00
Quote Anchor link
Ooh

Ik doe de weeknummering van af zondag
 
Chris

Chris

03/05/2007 13:00:00
Quote Anchor link
Chris schreef op 01.05.2007 10:10:
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
15
16
17
18
19
20
21
22
23
24
25
<?
include('config.php');

$data = "SELECT CURDATE() AS datum";
$uitkomst = mysql_query($data);
while($row2 = mysql_fetch_assoc($uitkomst)){
    $datum = $row2['datum'];
}


$vraagje = mysql_query("SELECT * FROM spelerstats WHERE NOT WEEKOFYEAR(datum)=WEEKOFYEAR($datum)");

if (mysql_num_rows($vraagje))
{

   while($rij = mysql_fetch_object($vraagje))
   {

   echo $rij->datum'<br>';
  
   }
}

else
{
    echo('Er zijn geen resultaten');
}


?>


Ik heb dus die controle er ingezet en hij zegt dus 'Er zijn geen resultaten'. Maar dat zouden er wel moeten zijn, aangezien er toch echt een speler in de datbase staat die nog moet worden geupdate.

Heb ik nog een fout in het script gemaakt of zo?


Weet iemand dan misschien wat ik fout doe?
 
Chris

Chris

05/05/2007 18:52:00
Quote Anchor link
ik zoek wel een ander soort oplossing want blijkbaar weet niemand het hier:(
 
Chris

Chris

06/05/2007 00:45:00
Quote Anchor link
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
15
16
17
18
19
20
<?
include('config.php');

$data = "SELECT CURDATE() AS datum";
$uitkomst = mysql_query($data);
while($row2 = mysql_fetch_assoc($uitkomst)){
    $datum = $row2['datum'];
}


$week = "SELECT WEEKOFYEAR('$datum') AS curweek";
$uitkomst2 = mysql_query($week);
while($row3 = mysql_fetch_assoc($uitkomst2)){
    $curweek = $row3['curweek'];
}


$vraagje = mysql_query("SELECT * FROM spelerstats WHERE NOT week='$curweek' AND last='ja'");
while($rij = mysql_fetch_object($vraagje)){
    echo '<br>'.$rij->naam;
}

?>


Ik ben bezig met een andere oplossing. Met wat hierboven staat zou het dan moeten werken. Maar heb 1 probleem, volgens mij werkt de NOT niet. Ik vraag me of het wel eens kan. Op school moesten we ook query's maken voor acces en daar kon je wel NOT gebruiken maar omdat het nou niet werkt met NOT vraag ik me het dus af of het hier wel werkt.

Het doel is dus:
Hij moet alles selecteren uit de database waar $curweek (week 18) niet week 18 en last ja is.

last is pas ja als dat de laatste update regel is van de speler.

Maar kan ik dus eigenlijk wel NOT gebruiken of moet ik wat anders gebruiken?
 
PHP Newbie

PHP Newbie

06/05/2007 00:55:00
Quote Anchor link
$query = "SELECT spelernaam FROM tabel ORDER BY update_datum LIMIT 10";

Dit zal de laatste 10 geupdate spelers geven
 
Chris

Chris

06/05/2007 01:40:00
Quote Anchor link
maar ik moet juist de namen van alle niet upgedate spelers hebben
 
PHP Newbie

PHP Newbie

06/05/2007 02:08:00
Quote Anchor link
niet geupdate sinds? Sinds een week? Een maand? Nog nooit?
 
Chris

Chris

06/05/2007 12:08:00
Quote Anchor link
PHP Newbie schreef op 06.05.2007 02:08:
Edit:

Alles gaat 3x :-s


gaat alles goed??:P

maaruh ff ter zake:P

elke week moet er opnieuw de statistieken ingevoerd worden, dit moet niet via UPDATE in de query want ik moet de oude resultaten ook nog houden. Dus heb ik een kolom aan gemaakt, 'last'. Zodra je de statestieken invoerd maakt hij eerst bij de speler waar je van in wil voeren de regel waar 'last' "ja" is nee van en dan voert hij een nieuwe regel in met de statistieken met last='ja' zodat je kunt zien dat dat de laatste regel van de speler is.

De hele query werkt wel behalve dat NOT, hij moet selecter waar 'week' niet deze week is. Ik dacht NOT maar als ik NOT gebruik selecteerd ie niks, terwijl er wel wat valt te selecteren maar laat ik NOT weg dan voert ie zoals de vraag dan luid de query goed uit.

Dus er is iets fout bij NOT, maar wat of waarom weet ik niet.
 
Jan Koehoorn

Jan Koehoorn

06/05/2007 12:21:00
Quote Anchor link
Chris schreef op 05.05.2007 18:52:
ik zoek wel een ander soort oplossing want blijkbaar weet niemand het hier:(

Kom kom, niet zo teleurgesteld ;-)

Eens kijken of ik je kan helpen.

1) Je hebt een aantal spelers
2) Ze hebben allemaal een DATE veld waar de datum in staat waarop ze geupdate zijn
3) Je wilt de spelers zien die de afgelopen week niet geupdate zijn, zodat je weet dat je die moet hebben

Correct?
 
Joren de Wit

Joren de Wit

06/05/2007 12:26:00
Quote Anchor link
Quote:
Dus heb ik een kolom aan gemaakt, 'last'. Zodra je de statestieken invoerd maakt hij eerst bij de speler waar je van in wil voeren de regel waar 'last' "ja" is nee van en dan voert hij een nieuwe regel in met de statistieken met last='ja' zodat je kunt zien dat dat de laatste regel van de speler is.
Waarom doe je dit? Zo te zien heb je in je spelerstats tabel ook gewoon een kolom met een datum erin. Dan weet je toch ook direct welk record van een bepaalde speler als laatste ingevoerd is? Om dat record op te halen zou je bijvoorbeeld zo'n query kunnen gebruiken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT *
FROM spelerstats
WHERE speler_id = 1
ORDER BY datum DESC
LIMIT 0,1

Nu krijg je het laatst ingevoerd record van de speler met het id 1.

Quote:
Het doel is dus:
Hij moet alles selecteren uit de database waar $curweek (week 18) niet week 18 en last ja is.

Dat kun je prima in 1 query voor elkaar krijgen. Alle php code die jij gebruikt is zeer omslachtig en overbodig! Het is vrij nutteloos om eerst met een sql query de datum te bepalen en vervolgende de week waarin die datum valt.

Maar goed, om even een query te geven waarbij je die kolom 'last' ook nog gebruikt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT *
FROM spelerstats
WHERE WEEKOFYEAR(CURDATE()) != WEEKOFYEAR(updatedatum)
AND last = 'ja'

Deze query bevat dus alle drie de queries die jij nu gebruikt.

Nog mooier, is het natuurlijk als je die hele last kolom eruit laat. Dan zou je zoiets krijgen als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
SELECT DISTINCT speler
FROM spelerstats
WHERE WEEKOFYEAR(CURDATE()) != WEEKOFYEAR(updatedatum)
ORDER BY datum DESC

Deze query haalt alle spelers op waarvan de updatedatum niet in deze week valt en selecteert tevens het laatste record van die spelers.

ps. Je heb in je tabel dus geen kolom 'week' meer, maar gewoon een datum kolom van het type DATE of DATETIME!
 
Chris

Chris

06/05/2007 12:42:00
Quote Anchor link
Jan Koehoorn schreef op 06.05.2007 12:21:
Chris schreef op 05.05.2007 18:52:
ik zoek wel een ander soort oplossing want blijkbaar weet niemand het hier:(

Kom kom, niet zo teleurgesteld ;-)

Eens kijken of ik je kan helpen.

1) Je hebt een aantal spelers
2) Ze hebben allemaal een DATE veld waar de datum in staat waarop ze geupdate zijn
3) Je wilt de spelers zien die de afgelopen week niet geupdate zijn, zodat je weet dat je die moet hebben

Correct?


"de afgelopen week niet geupdate zijn"

Ik moet de spelers hebben die deze week nog niet zijn upgedate.
Voor de rest is het idd correct:)

en Blanche, ik probeer het even:)
Gewijzigd op 01/01/1970 01:00:00 door Chris
 
Jan Koehoorn

Jan Koehoorn

06/05/2007 12:45:00
Quote Anchor link
Als je veld waarin je bijhoudt wanneer een speler geupdate is update_datum zou heten, krijg je zoiets:

SELECT spelernaam
FROM tabelnaam
WHERE DATEDIFF(CURDATE(), update_datum) > 7
ORDER BY spelernaam ASC

namen van velden en tabel aanpassen naar jouw eigen situatie.
 
Chris

Chris

06/05/2007 17:08:00
Quote Anchor link
die manier van blanche werkt volgens mij wel goed, tot nu toe heb ik in ieder geval nog geen problemen gemerkt

het verstandigst is om iedere woensdag opnieuw up te daten, dus als je een dag te laat bent kan je met DATEDIFF alleen de week er op donderdag updaten

dus ik gebruik liever de manier van blanche
al snap ik DISTINCT nog niet helemaal, maar goed meer ik er straks mee werk hoe beter ik het straks snap:)

bedankt voor het helpen allemaal he:)
 
Chris

Chris

06/05/2007 19:03:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?
include('config.php');
$vraag = mysql_query("SELECT DISTINCT naam FROM spelerstats WHERE WEEKOFYEAR(CURDATE()) != WEEKOFYEAR(datum) ORDER BY datum DESC");
while($rij = mysql_fetch_object($vraag)){
    echo '<span class="style6"><br><a href="http://chris.pro-studio.nl/hattrick/stats/add-stats.php?id='.$rij2->id.'">'.$rij->naam.'</a></span>';
}

?>


Dit gebruik ik nu, wat mijn probleem was werkt. Maar nou zoals je misschien al zag ik de rij id gebruiken voor de link. Maar als ik dit in de query zet: naam,id. Dan werkt hij niet meer, ik denk dat vanwege DISTINCT maar goed.

Weten jullie misschien hoe ik toch id kan ophalen maar ook DISTINCT kan gaan gebruiken?

* Als ik id er bij zet dan selecteerd ie alles omdat er geen dubbel id in staat, denk ik in ieder geval:P
 
Chris

Chris

12/05/2007 14:12:00
Quote Anchor link
Ik heb het een beetje geprobeerd om via de naam het te doen maar dat lukt niet. Via id weet ik wel dat het kan lukken maar goed dan moet ik wel weten hoe je met zo'n query een id moet selecteren.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?
include('config.php');  

$vraag = mysql_query("SELECT DISTINCT naam FROM spelerstats WHERE WEEKOFYEAR(CURDATE()) != WEEKOFYEAR(datum) ORDER BY datum DESC");
while($rij = mysql_fetch_object($vraag)){
echo '<a href="http://chris.pro-studio.nl/hattrick/stats/add-stats.php?naam='.$rij->naam.'">'.$rij->naam.'</a><br>';
}

?>

Dat is het scriptje en dit komt er uit:
http://chris.pro-studio.nl/hattrick/spelers/test3.php

Weet iemand hoe ik die query aan moet passen dat ik in de link ?id='.$rij->id.' kan zetten?
Gewijzigd op 01/01/1970 01:00:00 door Chris
 



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.