Data vergelijken in query
mod-edit::
Slechte topictitel
Heb titel veranderd, korter wist ik hem niet te maken, is hij zo goed dan? Chris
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)
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
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';
}
?>
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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;
}
?>
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
je zou bijv. dit kunnen doen
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
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');
}
?>
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.
Code (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
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');
}
?>
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?
suc6
Ik doe de weeknummering van af zondag
Chris schreef op 01.05.2007 10:10:
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?
Code (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
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');
}
?>
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?
ik zoek wel een ander soort oplossing want blijkbaar weet niemand het hier:(
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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;
}
?>
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?
Dit zal de laatste 10 geupdate spelers geven
maar ik moet juist de namen van alle niet upgedate spelers hebben
niet geupdate sinds? Sinds een week? Een maand? Nog nooit?
PHP Newbie schreef op 06.05.2007 02:08:
Edit:
Alles gaat 3x :-s
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.
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?
Quote:
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: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.
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.
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)
1
2
3
4
2
3
4
SELECT *
FROM spelerstats
WHERE WEEKOFYEAR(CURDATE()) != WEEKOFYEAR(updatedatum)
AND last = 'ja'
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)
1
2
3
4
5
6
7
8
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!
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!
Jan Koehoorn schreef op 06.05.2007 12:21:
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?
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
SELECT spelernaam
FROM tabelnaam
WHERE DATEDIFF(CURDATE(), update_datum) > 7
ORDER BY spelernaam ASC
namen van velden en tabel aanpassen naar jouw eigen situatie.
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:)
Code (php)
1
2
3
4
5
6
7
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>';
}
?>
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
Code (php)
1
2
3
4
5
6
7
8
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>';
}
?>
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