Autor Zpráva
H13
Profil
Ahoj, potřeboval bych poradit, z databáze si nechám vypsat různé položky, př.:

id - jmeno - akce1 - akce2
---------------------------------
1 - prvnipolozka - smazat - (sipka dolu)
2 - druhapolozka - smazat - (sipka dolu)(sipka nahoru)
3 - tretipolozka - smazat - (sipka nahoru)

Sloupec akce1 slouží pro smazání položky
Sloupec akce2 slouží pro posunování položek nahoru, resp. dolů

Potřeboval bych vědět jakým způsobem se posunování položek nahoru či dolů dělá, předání proměnných pomocí get je mi jasný:
např. posunutí 2 položky nahoru ...php?id=2&akce2=nahoru
Zajímá mě, jestli se do databáze zapisuje třeba do sloupce "poradi" pořadí položky, tak aby při každým výpisu položek z databáze platil výpis dle výběru (to znamená, přesunul jsem položku 2 na první místo, takže při každým výpisu se bude vypisovat na prvním místě, dokud to třeba nezměním...) nebo se používá nějaký jiný způsob...

díky moc, Honza
gaminn
Profil *
Moc jsem nepochopil, o co tady přesně jde, ale zdá se mi, že to tady zavání nějakým paskvilem.
nightfish
Profil
tabulka
id, jmeno, poradi

vypis
select id, jmeno from tabulka order by poradi

skriptem pak musis akorat zajistit, aby poradi obsahovalo spravne hodnoty - tzn. kdyz radek s poradim 4 posunes nahoru, tak musis pomoci sql zaridit, aby jej to prohodilo s prvkem s poradim 3

pak osetrit krajni stavy - tzn. aby ti poradi nelezlo pod 0
H13
Profil
Moc jsem nepochopil, o co tady přesně jde, ale zdá se mi, že to tady zavání nějakým paskvilem.

Právě že paskvilu se chci vyvyrovat. Zkusím jednoduše vysvětlit.

Příklad: Mám v databázi jména kamarádů. Petr, Pavel, Josef. Nechám si je z databáze vypsat. Vypíše se:

Josef
Pavel
Petr

a já chci přesunout Petra na první místo a Josefa na třetí a chci, aby se to z databáze vypisovalo pokaždé tak jak jsem to změnil...
nightfish
Profil
skriptem pak musis akorat zajistit, aby poradi obsahovalo spravne hodnoty - tzn. kdyz radek s poradim 4 posunes nahoru, tak musis pomoci sql zaridit, aby jej to prohodilo s prvkem s poradim 3

to jsem napsal dost blbě - fyzicky ty řádky zůstanou v databázi stejně, akorát se prohodí hodnoty ve sloupci poradi...
H13
Profil
to jsem napsal dost blbě - fyzicky ty řádky zůstanou v databázi stejně, akorát se prohodí hodnoty ve sloupci poradi...

jak pak vyřeším to, že např. jeden řádek smažu
gaminn
Profil *
Jak píše nightfish, ve sloupci budeš mít uloženo pořadí, pokud budeš přesouvat hodnotu z pozice x na y, tak bude potřeba zařídit přečíslování všech hodnot v intervalu <x,y> nebo <y,x>, tzn. bude tam muset být jeden sql dotaz navíc.
Kajman_
Profil *
update poradi=if(poradi=3,3-1,3) from tabulka where poradi=3 or poradi=3-1

by mělo mělo posunout řádek 3 o jeden výš (snížit hodnotu v sloupečku pořadí) a pokud tam je dvojka, tak tu změnit na trojku
alteaffe
Profil *
ja to mam takhle

prvne si udelam vypis vsech polozek zjistim si jejich pocet $rows = mysql_num_rows($db_row);
pak mam selekt pole kde mi vypisuje cisla od 1 az po ten $rows dejme tomu $rows je 12

no a pak pri ukladani u zmeny

jeste pro orientaci $po_d toto je poradi domu ktere ma ted momentalne ulozene treba je 5
a $z_po je zmena poradi , to je poradi ktere zmenis v tom selekt poli.

if ($po_d < $z_po) {
$posuv = "dolu";
}
elseif ($po_d > $z_po) {
$posuv = "nahoru";
}
elseif ($po_d == $z_po) {
}
/////////////////////////////////////////// DOLU //////////////////////////////////////////
if ($posuv == "dolu") {
$pocet_zmen = $z_po - $po_d;

$max = 'limit ' .$po_d .',' .$pocet_zmen;

$db = mysql_query("SELECT * FROM b_haus WHERE porad <= '$z_po' AND stadt_id = '$st_id' ORDER by porad ASC " . $max . " ")or die(mysql_error());
while ($ha = MySQL_Fetch_Array($db)) {
// $query = mysql_query("UPDATE b_haus SET porad = " . ($ha['porad'] - 1) . " WHERE id = ". $ha['id'] ." ");
}
//$query = mysql_query("UPDATE b_haus SET porad = '$z_po' WHERE id = '$ha_id' ");
}
//////////////////// nahoru //////////////////////////////////////////////////////////////
if ($posuv == "nahoru") {

$pocet_zmen = $po_d - $z_po;
$kolikaty = $z_po - 1;
$max = 'limit ' .$kolikaty .',' .$pocet_zmen;

$db = mysql_query("SELECT * FROM b_haus WHERE porad <= '$po_d' AND stadt_id = '$st_id' ORDER by porad ASC " . $max . " ")or die(mysql_error());
while ($ha = MySQL_Fetch_Array($db)) {
echo " ".$ha['haus']." - ".$ha['porad']." <br>";
$query = mysql_query("UPDATE b_haus SET porad = " . ($ha['porad'] + 1) . " WHERE id = ". $ha['id'] ." ");
}
$query = mysql_query("UPDATE b_haus SET porad = '$z_po' WHERE id = '$ha_id' ");

}
alteaffe
Profil *
abych to vysvetlil kdyz posouvas poradi dolu neni to stejne jako kdyz ho posouvas nahoru .
Kdyz posouvas poradi nahoru (tj. ze mas poradi 12 a chces ho zmenit na 2 )
tak si vypises z databaze vsechny poradi ktere jsou vetsi a rovne nez to poradi 2 a ke kazdemu poradi prictes jednicku
a pak to posledni 12 poradis zmenis na tu 2ku.
Takze poradi 2 bude 3 - 3 bude 4 - 4bude 5 atd.. 11 bude 12 a konec a ta tvoje dvanactka pak bude 2.
Takhle muzes menit poradi pri libovolnem poctu polozek , kdyz tam budes tabule pridavat nebo mazat.
Akorad kdyz budes pridavat neco do tabule musis ji hned zapsat poradi , ja to mam tak ze mam $rows = pocet tech polozek + 1 , protoze pridavam . Automaticky se hodi na posledni misto.
alteaffe
Profil *
jo a tu zmenu poradi mam v editaci
Toto téma je uzamčeno. Odpověď nelze zaslat.