Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pozycja w menu
Forum PHP.pl > Forum > PHP
chomiczek
Mam menu, którego kolejność zależy od jednego pola w bazie, tzn. od jego wartości...
Mam w bazie:
Kod
Auto -       Nazwa       - PozMenu
404 - Meble Kuchenne - 1
405 - Meble Młodzieżowe - 2
406 - Sypialnie - 3


Jak powinno wyglądać zapytanie, które zmieni wartość odpowiedniego pola o '++' lub '--' oczywiste jest, że nie może sie powtórzyć pozycja w menu, więc musi nastąpic zmiana wszystkich oznaczeń.
hwao
w mysql chyba tego nie zrobisz, chociaz.., ale 2/3 querymi ;]

jezeli podnosisz to musisz liczbe ktora jest wieksza o jeden obnizyc o jeden, jezeli obnizasz to liczbe ktora jest mniejsza o jeden musissz podniesc

W php liczysz te liczby i robisz odpowiednie update
tiraeth
1. Pobierasz sobie wszystkie rekordy do tablicy
2. Odpowiednio sobie podmieniasz je
3. Usuwasz wszystkie rekordy z bazy danych
3. Wysyłasz pobrane wcześniej i zmienione rekordy do bazy

Tak jest chyba najprościej smile.gif Choć przy wielkiej ilości rekordów może spowodować baardzo długie podmienianie... spróbuj pokombinować z tymi 2/3 zapytaniami smile.gif
chomiczek
Hmm.. rozwiązałem.. zamieszczam na przyszłość jesli ktos by potrzebowała:
  1. <?php 
  2. if ($row['Pozycja']==1) echo 'G';
  3. else { ?>
  4. <a href="index.php?move=<?php echo $row['CategoryId']; ?>,G,<?php echo $row['Pozycja']; ?>">G</a>
  5. <?php } 
  6. if ($row['Pozycja']==$ile[0]) echo ' D';
  7. else { ?>
  8. &nbsp;<a href="index.php?move=<?php echo $row['CategoryId']; ?>,D,<?php echo $row['Pozycja']; ?>">D</a>
  9. <?php } ?>

Pokazuje je na stronie sortują wg ASC więc tak naprawdę kliknięcie w G ma podnieść na stronie o jedną pozycję, ale w bazie zmienia się na $pozycja-1.

A tym kodem robie update pozycji:
  1. <?php
  2. if ($_GET['move']) {
  3. // rozstrzelenie linku
  4. $move = explode(",",$_GET['move']);
  5. $prev = $move[2]-1;
  6. $next = $move[2]+1;
  7.  
  8. if ($move[1]=='D') $gdzie = $move[2]+1;
  9. if ($move[1]=='G') $gdzie = $move[2]-1;
  10.  
  11. $zapytanie = "SELECT * FROM `Category` WHERE `Pozycja`='".$gdzie."' OR `Pozycja`='".$move[2]."' ORDER BY `Pozycja` LIMIT 2";
  12. $odp=mysql_query($zapytanie);
  13. while($wiersz=mysql_fetch_array($odp)) {
  14. if ($wiersz['Pozycja']==$move[2]&&$wiersz['CategoryId']==$move[0]) 
  15. $update = "UPDATE `Category` SET `Pozycja`='".$gdzie."' WHERE `CategoryId`='".$move[0]."' LIMIT 1";
  16. if ($wiersz['Pozycja']==$gdzie) 
  17. $update = "UPDATE `Category` SET `Pozycja`='".$move[2]."' WHERE `CategoryId`='".$wiersz['CategoryId']."' LIMIT 1";
  18. @mysql_query($update);
  19. }
  20. }
  21. ?>


Hmm.. tak właśnie sobie myśle i jest jeden problem z tym skryptem.. jeśli zostanie skasowana jakaś pozycja.. wtedy odstep pomiędzy kolejnymi rekordami będzie np. 2 a nie 1.. póki co to wystarcza dla moich potrzeb, ale pasowałoby to zmienic na przyszlosć.
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.