Stworzyłem prosty skrypt galerii z zarządzaniem kategoriami, wrzucaniem plików i przestawianiem ich kolejności o 1 w górę i w dół. Działało to dwa miesiące, klient wrzucił ponad 100 zdjęć i chciał przeklikać te ostatnie na pierwsze miejsce. Dorzuciłem mu więc mały formularz z polem select, który po zmianie przestawia dane zdjęcie na wybrane w select pole.
U mnie działa to tak:
I. Formularz:
<form style="display: inline" method="get" action="?"> <input type="hidden" name="mode" value="gallery" /> Na miejsce: <select onchange="java script:this.form.submit()" style="font-size: 10px" name="to_place"> <option value="">-----</option> <?php $y = 0; while($y < $sql->getSelectedRows()) { ++$y; } ?> </select> </form>
II. Fragment kodu odpowiedzialny za przesuwanie:
<?php if($_GET['from_place'] && $_GET['to_place'] && $_GET['photo']) { //kierunek zmiany: if($_GET['from_place'] > $_GET['to_place']) //do góry { $fromlimit = $_GET['to_place'] - 1; $q = mysql_query('SELECT * FROM gr_galphotos WHERE no > '.$fromlimit.' AND no < '.$_GET['from_place'].' AND galery = '.$_GET['gallery'].' ORDER BY no'); { $update['no'] = $r['no'] + 1; $sql->updateQuery('gr_galphotos', $update, 'id='.$r['id']); } $update['no'] = $_GET['to_place']; $sql->updateQuery('gr_galphotos', $update, 'id='.$_GET['photo']); } if($_GET['from_place'] < $_GET['to_place']) //na dół { $tolimit = $_GET['to_place'] + 1; $q = mysql_query('SELECT * FROM gr_galphotos WHERE no > '.$_GET['from_place'].' AND no < '.$tolimit.' AND galery = '.$_GET['gallery'].' ORDER BY no'); { $update['no'] = $r['no'] - 1; $sql->updateQuery('gr_galphotos', $update, 'id='.$r['id']); } $update['no'] = $_GET['to_place']; $sql->updateQuery('gr_galphotos', $update, 'id='.$_GET['photo']); } } ?>
Czyli: najpierw przesuwam wszystkie zdjęcia z zakresu od 'from_place' do 'to_place', potem aktualizuję dzięki $_GET['photo'] odpowiednie zdjęcie i mam wszystko pokolei.
Moje pytanei: czy da się skonstruować w MySQL takie zapytanie, które by automatycznie przesunęło mi zdjęcia z przedziału $_GET['from_place'] - $_GET['to_place'] o 1? Czy jednak tak jak robię jest najszybciej i tak to zostawić?
Pozdrawiam