Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: Miten vertailla kannasta edellisiä rivejä?

creepy [23.01.2012 17:18:30]

#

Pähkinä purtavaksi

haen php:llä taulusta rivejä ja jos rivejä löytyy useampi samalta timestampilta niin miten saisin ne samaan diviin tulostettua?

varmaan onnistuisi sql:llä, mutta onnistuuko php:llä?

eli pitäisi jotenkin vertailla edellistä riviä foreach:sa?

vai olenko ihan väärillä jäljillä?

makumaku [23.01.2012 17:34:28]

#

Ihan mielenkiinnosta kysyn että mihin tarvitset tälläistä, jossa rivejä tulostetaan eri ryhmiin sekunnin tarkkuudella.

Mutta käyt vaikka koko taulukon läpi foreach:llä, ja vertaat onko timestamp-arvo sama kuin edellinen. Jos oli muuttunut, niin tulostat divin lopputagit edelliselle, ja alkutagit seuraavalle diville. Ei pitäisi olla kovin vaikea homma.

Macro [23.01.2012 17:41:27]

#

Ehkä helpompaa olisi tehdä niistä taulukko.

<?php
// Hae tietokannasta

$taulukko = array();
while($tieto = mysql_fetch_array($kysely)) {
   $taulukko[$tieto["aika"]][] = $tieto["teksti"];
}
?>

creepy [25.01.2012 15:13:23]

#

Oikeastaa tuo ensimmäinen kysymys ei ole tarpeeksi tarkka.

Haluasin siis kannasta tulostaa dataa diveihin ja jos on saman tyylistä peräkkäin niin samaan diviin.

Eli

kanta
id,foo,nimi
0, 123, matti
1, 123, pertti
2, 123, pertti
3, 124, pertti
4, 123, matti
5, 123, pertti

Nyt php&mysql yhdistelmällä pitäisi saada tulostettua sivuille aina div:n sisään rivit. Esimerkin kannassa vaan pitäisi saada id:t 1 ja 2 samaan diviin ja muut eriin. Tätä olen tässä miettiny ja nyt ei vaan tajua.

Eli lyhyesti kaksi samaa tietoa rivillä ja voi olla vaikka 5 peräkkäin niin tulostuu samaan diviin.

makumaku [25.01.2012 15:23:47]

#

Käy tulokset läpi silmukassa ja jos foo ja nimi ei ole muuttunut edellisestä kierroksesta niin tulostat ne ilman mitään lisukkeita. Sitten kun huomaat että ne oli muuttuneet edellisistä arvoista niin tulostat aina "</div><div>" ja sen jälkeen foo, nimi. Näin yksinkertaisesti sanottuna.

creepy [25.01.2012 20:06:59]

#

miten teen tuon vertauksen? jos esim 4 samaa peräkkäin?

ei nyt ajatus kulje.

-tossu- [25.01.2012 20:50:44]

#

Vertaa vain joka kerta riviä edelliseen riviin. Jos rivillä on useampi sarake, jonka muuttumisen pitää vaihtaa DIV:iä, hankaloituu homma hieman. En ole testannut tätä mitenkään, mutta idean pitäisi ainakin tulla selväksi:

$r2 = null;
while ($rivi = $kysely->fetch (PDO::FETCH_NUM)) {
	$r1 = array_slice ($rivi, 1);
	if ($r1 != $r2) {
		// uusi DIV
	}
	$r2 = $r1;

	// tulosta rivi
}

Array_slice-funktiolla otetaan rivistä muut sarakkeet paitsi id. Sen jälkeen vertaillaan, poikkeaako jäljelle jäänyt rivin osa edellisestä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta