Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Szybkie przestawianie kolejności.
Forum PHP.pl > Forum > PHP
Tarcil
Witam

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:
  1. <form style="display: inline" method="get" action="?">
  2.    <input type="hidden" name="mode" value="gallery" />
  3.    <input type="hidden" name="gallery" value="<?php echo $_GET['gallery'] ?>" />
  4.    <input type="hidden" name="photo" value="<?php echo $photo['id'] ?>" />
  5.    <input type="hidden" name="from_place" value="<?php echo $count ?>" />
  6.    Na miejsce:
  7.    <select onchange="java script:this.form.submit()" style="font-size: 10px" name="to_place">
  8.        <option value="">-----</option>
  9.        <?php
  10.        $y = 0;
  11.        while($y < $sql->getSelectedRows())
  12.            {
  13.            ++$y;
  14.            echo '<option value="'.$y.'">'.$y.'</option>';
  15.            }
  16.            ?>
  17.    </select>
  18. </form>


II. Fragment kodu odpowiedzialny za przesuwanie:
  1. <?php
  2. if($_GET['from_place'] && $_GET['to_place'] && $_GET['photo'])
  3.    {
  4.    //kierunek zmiany:
  5.    if($_GET['from_place'] > $_GET['to_place'])    //do góry
  6.        {
  7.        $fromlimit = $_GET['to_place'] - 1;
  8.        $q = mysql_query('SELECT * FROM gr_galphotos WHERE no > '.$fromlimit.' AND no < '.$_GET['from_place'].' AND galery = '.$_GET['gallery'].' ORDER BY no');
  9.        while($r = mysql_fetch_array($q))
  10.            {
  11.            unset($update);
  12.            $update['no'] = $r['no'] + 1;
  13.            $sql->updateQuery('gr_galphotos', $update, 'id='.$r['id']);
  14.            }
  15.        unset($update);
  16.        $update['no'] = $_GET['to_place'];
  17.        $sql->updateQuery('gr_galphotos', $update, 'id='.$_GET['photo']);
  18.        }
  19.        
  20.        
  21.    if($_GET['from_place'] < $_GET['to_place']) //na dół
  22.        {
  23.        $tolimit = $_GET['to_place'] + 1;
  24.        $q = mysql_query('SELECT * FROM gr_galphotos WHERE no > '.$_GET['from_place'].' AND no < '.$tolimit.' AND galery = '.$_GET['gallery'].' ORDER BY no');
  25.        while($r = mysql_fetch_array($q))
  26.            {
  27.            unset($update);
  28.            $update['no'] = $r['no'] - 1;
  29.            $sql->updateQuery('gr_galphotos', $update, 'id='.$r['id']);
  30.            }
  31.        unset($update);
  32.        $update['no'] = $_GET['to_place'];
  33.  
  34.        $sql->updateQuery('gr_galphotos', $update, 'id='.$_GET['photo']);            
  35.        }
  36.    }
  37. ?>


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
ddiceman
  1. mysql_query('UPDATE gr_galphotos SET no = no+1 WHERE no BETWEEN '.intval($_GET['from_place']).' AND '.intval($_GET['to_place']).' AND galery = '.intval($_GET['gallery']).';');
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.