Archief - Steeds resultaat teveel weergegeven

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

svinus

Legacy Member
onderstaand stukje code gaat kijken in de database naar de resultaten die die dag op de site moeten verschijnen.

Als er in de database 4 resultaten voldoen aan de voorwaarden dan krijg ik de 4 resultaten op de site wel tevoorschijn maar staat er een 5e blanco resultaat bij.

heb ik 10 resultaten die voldoen in de db dan staan er 11 op de site (wederom die blanco)

Wat doe ik verkeerd ?

aantal= 100;
$hulp=1;

while ($hulp < $aantal) {



//add to master_name table
$get_cats = "select id, date, vraag, antwoord, link from pv_prijs_temp where date = now() order by rand() limit 1";
$get_cats_res = mysql_query($get_cats) or die(mysql_error());
$prijzen = mysql_fetch_array($get_cats_res);
$id = $prijzen[id];
$date = stripslashes($prijzen[date]);

$vraag = mysql_real_escape_string($prijzen[vraag]);
$antwoord = mysql_real_escape_string($prijzen[antwoord]);
$link = mysql_real_escape_string($prijzen[link]);

$add_master = "INSERT pv_prijs values('','$date','$vraag','$antwoord','$link')";
mysql_query($add_master) or die(mysql_error());
$delete_item = "delete from pv_prijs_temp where id = $id";
mysql_query($delete_item) or die(mysql_error());

$hulp=$hulp+1;
}

mpolo

Legacy Member
ipv die while te gebruiken en die var $hulp kan je veel beter werken met een for loop:

for($i=0;$i<10;$i++){

}

en hou er rekening mee dat een computer vanaf 0 begint te tellen dus een teller loopt meestal van 0...10 en door middel van de bovenste marge <,<=,= te stellen kan je het resultaat dan beïnvloeden.

Hoop dat je hier iets mee bent

blackrabbit

Legacy Member
mpolo: :wtf:


svinus: lees eens wat guides over Php & (My)SQL (met subqueries).
Je code is hoogst inefficiënt en kan veel leesbaarder.

Tyfius

Legacy Member
mpolo zei:
ipv die while te gebruiken en die var $hulp kan je veel beter werken met een for loop:

for($i==0;$i<10;$i++){

}

en hou er rekening mee dat een computer vanaf 0 begint te tellen dus een teller loopt meestal van 0...10 en door middel van de bovenste marge <,<=,= te stellen kan je het resultaat dan beïnvloeden.

Hoop dat je hier iets mee bent
Zever, gezever. Een computer begint niet van 0 te tellen, de programmeertaal in kwestie doet dat, en niet alle talen doen dat. Daarnaast staat er een fout in uw for-loop. Langs de andere kant is een for-loop natuurlijk wel iets duidelijker en handiger dan dergelijke while-loop.

blackrabbit zei:
mpolo: :wtf:


svinus: lees eens wat guides over Php & (My)SQL (met subqueries).
Je code is hoogst inefficiënt en kan veel leesbaarder.
Alles kan veel leesbaarder, maar 't is nu niet dat ge een theoretische fysicus moet zijn om zijn code te kunnen lezen, ik vind dat, naast het feit dat hij geen PHP code tags gebruikt heeft en dit forum dat dan vrij hard verkracht, vrij goed leesbaar. En qua efficiëntie is daar ook weinig aan te doen dat de parser en compiler al niet voor u oplossen. Ik wil u dit anders wel is zien optimalizeren (met subqueries!).

Nu, aan dit stukje code is weinig te zien waar het fout gaat. Ik gok dat ge uw $aantal al ergens uitgelezen hebt via een query en dan zal die misschien fout zitten, of inderdaad loop je 1x te veel door die while-loop.

blackrabbit

Legacy Member
Tyfius zei:
Zever, gezever. Een computer begint niet van 0 te tellen, de programmeertaal in kwestie doet dat, en niet alle talen doen dat. Daarnaast staat er een fout in uw for-loop. Langs de andere kant is een for-loop natuurlijk wel iets duidelijker en handiger dan dergelijke while-loop.

Alles kan veel leesbaarder, maar 't is nu niet dat ge een theoretische fysicus moet zijn om zijn code te kunnen lezen, ik vind dat, naast het feit dat hij geen PHP code tags gebruikt heeft en dit forum dat dan vrij hard verkracht, vrij goed leesbaar. En qua efficiëntie is daar ook weinig aan te doen dat de parser en compiler al niet voor u oplossen. Ik wil u dit anders wel is zien optimalizeren (met subqueries!).

Nu, aan dit stukje code is weinig te zien waar het fout gaat. Ik gok dat ge uw $aantal al ergens uitgelezen hebt via een query en dan zal die misschien fout zitten, of inderdaad loop je 1x te veel door die while-loop.
Een taal begint ook niet te tellen bij 0 of 1, een taal gaat al dan niet een default value geven aan bvb integers (vaak: 0). Maar verder wel akkoord ofcourse (hence the :wtf:)

Verder: hij voert 100x een select-query uit. Dat kan écht wel beter hoor.
Bovendien kan die code een bepaald resultaat meermaals weergeven (tenzij dit wordt verhinderd door unique constraints in zijn pv_prijs, maar in dat geval zal hij dus te weinig items gaan toevoegen...)
Stuk code zou meteen veel leesbaarder & minder foutgevoelig zijn moest hij gewoon 100 random items uit zijn temp-table halen & vervolgens met mysql_fetch_array (/object) die resultaten 1-voor-1 bewerken. Dan moet je helemaal niet knoeien met voze 'hulptellers'.

Tyfius

Legacy Member
blackrabbit zei:
Een taal begint ook niet te tellen bij 0 of 1, een taal gaat al dan niet een default value geven aan bvb integers (vaak: 0). Maar verder wel akkoord ofcourse (hance the :wtf:)
Een default value en beginnen tellen vanaf is nog iets anders. In VB begint een array bij 1, in de meeste andere talen vanaf 0. Daar wou ik eigenlijk op doelen.
blackrabbit zei:
Verder: hij voert 100x een select-query uit. Dat kan écht wel beter hoor.
Bovendien kan die code een bepaald resultaat meermaals weergeven (tenzij dit wordt verhinderd door unique constraints in zijn pv_prijs, maar in dat geval zal hij dus te weinig items gaan toevoegen...)
Stuk code zou meteen veel leesbaarder & minder foutgevoelig zijn moest hij gewoon 100 random items uit zijn temp-table halen & vervolgens met mysql_fetch_array (/object) die resultaten 1-voor-1 bewerken. Dan moet je helemaal niet knoeien met voze 'hulptellers'.
Mijn excuses, ik was naar de code aan het zien, niet naar de flow. We steken het op nog niet goed wakker zijn. Sowieso kan dit anders, ik gok dat hij zijn $aantal ook via een query ophaalt, dat kan hij dan in 1 query combineren. Dat is inderdaad performanter.

Kemblin

Legacy Member
onduidelijke code en onduidelijke vraag, ge kunt al beginnen met ipv limit 1 met limit 100 te werken en die while lus te verkleinen. Ge moet proberen zoveel mogelijk dingen in uw queries op te lossen ipv in php.

Verder is er niet genoeg code/uitleg bij de code om te zeggen wat er mis gaat.

blackrabbit

Legacy Member
Tyfius zei:
Een default value en beginnen tellen vanaf is nog iets anders. In VB begint een array bij 1, in de meeste andere talen vanaf 0. Daar wou ik eigenlijk op doelen.Mijn excuses, ik was naar de code aan het zien, niet naar de flow. We steken het op nog niet goed wakker zijn. Sowieso kan dit anders, ik gok dat hij zijn $aantal ook via een query ophaalt, dat kan hij dan in 1 query combineren. Dat is inderdaad performanter.
No problemo ;) Klopt idd dat VB bij 1 begint te tellen in arrays, denk ook dat het ver de enigste uitzondering is?

Verder:
Zelfs al komt $aantal uit een andere query => subquery lost dat eenvoudig op (tenzij bij het ophalen van $aantal ook nog andere data opgevraagd wordt ofcourse).

Kemblin zei:
onduidelijke code en onduidelijke vraag
...
Verder is er niet genoeg code/uitleg bij de code om te zeggen wat er mis gaat.
Absoluut, als we zouden weten wat de bedoeling was dan zouden we dáar al tenminste niet naar moeten gissen :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan