Als ik een loop heb van een fetchObject als deze:
while($row = $objStmt->fetchObject())
{
echo($row->naam);
}


Kan ik dan in deze while loop ook bijv. de naam van de volgende record krijgen?
Dus dat hij dit weergeeft:

Naam: Jan
Volgende resultaat is: Kees

Zodat ik voordat hij naar het volgende resultaat gaat kan kijken wat daar in zit?
En wat is het nut?
- SanThe - op 17/12/2014 17:22:28

En wat is het nut?

Wat is het nut van jouw vraag?
Ja goed Sven zo kunnen we nog wel even doorgaan. Om jou een juist antwoord/advies te kunnen geven hebben we soms wat meer informatie nodig. Daarom is het van belang dat het voor ons duidelijk wordt wat je precies wilt bereiken. Wil je één record op een pagina tonen en alvast een idee geven van wat het volgende record is?

Dan zou je LIMIT kunnen gebruiken in je query:

LIMIT 0, 2 // eerste twee records: eerste is degene die je laat zien, de tweede is de volgende
LIMIT 1, 2 // tweede en derde record.
LIMIT 2, 2 // derde en vierde record.
LIMIT 3, 2 // vierde en vijfde record.
Frank Nietbelangrijk op 17/12/2014 18:36:26

Ja goed Sven zo kunnen we nog wel even doorgaan. Om jou een juist antwoord/advies te kunnen geven hebben we soms wat meer informatie nodig. Daarom is het van belang dat het voor ons duidelijk wordt wat je precies wilt bereiken. Wil je één record op een pagina tonen en alvast een idee geven van wat het volgende record is?

Dan zou je LIMIT kunnen gebruiken in je query:

LIMIT 0, 2 // eerste twee records: eerste is degene die je laat zien, de tweede is de volgende
LIMIT 1, 2 // tweede en derde record.
LIMIT 2, 2 // derde en vierde record.
LIMIT 3, 2 // vierde en vijfde record.


Nee kijk. Dit voorbeeld toont het vorige en huidige resultaat:

$objPDO = new clsPDO();
$objStmt = $objPDO->prepare('SELECT * FROM songhistory');

if($objStmt->execute())
{
$strPrevRow = '';

while($r = $objStmt->fetchObject())
{
if($strPrevRow != '')
echo('Vorig record is: '.$strPrevRow.'<br>');

echo('Huidig record is: '.$r['songtitle'].'<br><br>');

$strPrevRow = $r['songtitle'];
}
}


Maar nu wil ik ook de VOLGENDE van de loop gebruiken voor een handeling.
Dit heb ik nodig voor een songhistory class, als ik moet gaan uitleggen waarom ben ik wel even bezig, iets met vergelijken e.d. (Als de volgende hetzelfde is moet hij een handeling overslaan).
Sven de Haas op 17/12/2014 19:35:27

(Als de volgende hetzelfde is moet hij een handeling overslaan).


Zitten er dan dubbele records in de database?
ipv volgend item moet je vorig item gebruiken, dus item opslaan in een var zoiets als:


<?php
	$lastItem = '';

	while($row = $objStmt->fetchObject()) {
		if ($lastItem != $row->naam) {
			echo $row->naam;
		}

		$lastItem = $row->naam;
	}
?>
Sabaton Joakim op 17/12/2014 20:38:34

ipv volgend item moet je vorig item gebruiken, dus item opslaan in een var zoiets als:


<?php
	$lastItem = '';

	while($row = $objStmt->fetchObject()) {
		if ($lastItem != $row->naam) {
			echo $row->naam;
		}

		$lastItem = $row->naam;
	}
?>


Jij doet nu hetzelfde als ik in mijn script in mijn vorige post
Ah sorry, had je post niet gelezen. Excuses.

Maar ik denk dat zoiets als onderstaande code zou kunnen werken (zo uit mijn hoofd, dus kan fouten bevatten). Anders zou je eventueel nog SQL JOINS kunnen werken om het voor elkaar te krijgen maar denk dat dit eerst even makkelijker is.

<?php
	$items = array();

	while($row = $objStmt->fetchObject()) {
		$items[] = $row;
	}

	for ($i = 0; $i < count($items); $i++) {
		if (isset($items[$i - 1])) {
			echo 'Vorig item: '.$items[$i - 1]->naam.'<br />';
		}

		echo 'Huidig item: '.$items[$i]->naam.'<br />';

		if (isset($items[$i + 1])) {
			echo 'Volgend item: '.$items[$i + 1]->naam.'<br />';
		}
	}
?>
Sabaton Joakim op 17/12/2014 22:32:25

Ah sorry, had je post niet gelezen. Excuses.

Maar ik denk dat zoiets als onderstaande code zou kunnen werken (zo uit mijn hoofd, dus kan fouten bevatten). Anders zou je eventueel nog SQL JOINS kunnen werken om het voor elkaar te krijgen maar denk dat dit eerst even makkelijker is.

<?php
	$items = array();

	while($row = $objStmt->fetchObject()) {
		$items[] = $row;
	}

	for ($i = 0; $i < count($items); $i++) {
		if (isset($items[$i - 1])) {
			echo 'Vorig item: '.$items[$i - 1]->naam.'<br />';
		}

		echo 'Huidig item: '.$items[$i]->naam.'<br />';

		if (isset($items[$i + 1])) {
			echo 'Volgend item: '.$items[$i + 1]->naam.'<br />';
		}
	}
?>


Haha ik dacht al zoiets :P
Dan zou dit inderdaad de enige mogelijkheid zijn.
Ik dacht dat er misschien een makkelijkere/mooiere oplossing voor was.

Toch bedankt voor de moeite! ;)
Het eenvoudigst lijkt me om een fetchAll() te doen. Je hebt dan je complete resultset in een array en dan is het een eitje om te kijken wat er in het volgende record zit.

Het nadeel is dat het wel meer geheugen kost, dus het hangt een beetje af van het aantal records en de recordgrootte of het handig is om dit te doen. Uiteraard kun je dat altijd zelf inperken door een LIMIT op te nemen in je query.

Reageren