Autor Zpráva
n5871
Profil *
Ahoj, narazil jsem na jeden problem.

Ve fotogalerii bych rad zmenil poradi fotografii, napriklad prvni fotku bych chtel premistit na 10 pozici,
nedokazu ale vymyslet lepsi zpusob nez prohodit dve poradi mezi sebou.

Chtel bych se zeptat nekoho zkuseneho, jak docilit toho aby se poradi jakoby prepsala.

Tzn, pri presunu fotky z poradi 1 na 10 se z fotky s poradi 2, stane cislo 1, z 3 se stane 2 atd.

Napadlo mne take najit pozici na kterou chci presunout a zvetsovat cisla az od ni..ale nevim co by bylo lepsi, pokud mozno v cistem MySQL
diky za jakoukoliv radu, snad to pomuze i nekomu dalsimu.
__construct
Profil
UPDATE tabulka SET poradie = 10 WHERE poradie = 1 …
n5871
Profil *
Zkousel jsem neco takoveho:
UPDATE photos SET pht_order = +1 WHERE pht_order > 1 AND gal_id=2


Ale nefunguje to asi presne, ten predchozi priklad provede jenom zamenu.
panther
Profil
n5871:
…SET pht_order = (pht_order +1)…
n5871
Profil *
Aha, pardon..ale ted jsem si uvedomil, ze timhle zpusobem budu dosatvat duplicitni udaje o poradi, da se to nejak osetrit aby probehl treba nejaky reorder a precislovani?
panther
Profil
n5871:
prohození záznamů PHP->mySQL
n5871
Profil *
Diky ale nejsem si jist, zda to presne mohu pouzit, pokud rozlisuji dva smery razeni? Tj. nahoru a dolu, co bych tedy pak dosazoval za ten druhy parametr?

UPDATE web SET poradi=IF(poradi==$nahoru, $predchozi, $nahoru) WHERE poradi IN ($predchozi, $nahoru)


Ted to delam takto a nevim , jak bych to do do prvniho query mel napasovat?

if( trim($_GET['direction'])=="top")
{  //Prohozeni poradi fotografii

$sql = 'UPDATE photos SET ';
$sql .= 'pht_order = pht_order+1';
$sql .= ' WHERE pht_id='.$_GET['pht_id'];
$sql .= ' AND gal_id='.$_GET['gal_id'];
@$v = $db->q($sql);


// die($_GET['gal_id']);
if($v)
{
	if (headers_sent())
	{
	echo 'nejde odeslat hlavičku';
	}
	else
	{

	header('Location:galerie.php?gal_id='.$_GET['gal_id']);
		exit;
	}
}
}


if( trim($_GET['direction'])=="under")
{  //Prohozeni poradi fotografii

$sql = 'UPDATE photos SET ';
$sql .= 'pht_order = pht_order-1';
$sql .= ' WHERE pht_id='.$_GET['pht_id'];
$sql .= ' AND gal_id='.$_GET['gal_id'];
@$v = $db->q($sql);
// die($_GET['gal_id']);

	if (headers_sent())
	{
			echo 'nejde odeslat hlavičku';
	}
	else
	{
	header('Location:galerie.php?gal_id='.$_GET['gal_id']);
	exit;
	}
dakota
Profil
pri zmene poradia fotky napr. z 5 na 8 a naopak z 8 na 5 potrebuješ zmeniť len poradie fotiek medzi 5 až 8

nastavenie noveho poradia presuvanej fotky

UPDATE photos
SET photo_order = $new_order
WHERE photo_id = $photo_id


nastavenie poradia ovplyvnených fotiek

$new_order < $old_order
- ak je nové poradie menšie ako pôvodne poradie
- napr. pri zmene z 8 na 5 - treba zväčšiť o 1 poradie fotiek 5 až 8 okrem presuvanej fotky (poradie už má nastavené)

UPDATE photos
SET photo_order = photo_order + 1
WHERE (photo_order BETWEEN $new_order AND $old_order)
AND photo_id != $photo_id
AND gallery_id = $gallery_id


$new_order > $old_order
- ak je nové poradie väčšie ako pôvodne poradie
- napr. pri zmene z 5 na 8 - treba zmenšiť o 1 poradie fotiek 5 až 8 okrem presuvanej fotky (poradie už má nastavené)

UPDATE photos
SET photo_order = photo_order - 1 
WHERE (photo_order BETWEEN $old_order AND $new_order) 
AND photo_id != $photo_id
AND gallery_id = $gallery_id

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: