Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql]zamiana numerami wybranych rekordów
Forum PHP.pl > Forum > Przedszkole
Saddam92
Witam, tu jeszcze raz ja.
Tym razem chodzi mi o to czy można za pomocą mniej niż 3 zapytań SQL zamienić rekord z rekordem ich idenftykatorami, (tzn. rekord o id=3 będzie miał id=7, a rekord o id=7, id=3)
  1. UPDATE tabela SET id=-2 WHERE id=$id2
  1. UPDATE tabela SET id=$id2 WHERE id=$id1
  1. UPDATE tabela SET id=$id1 WHERE id=-2
questionmark.gif
nospor
Od razu mowie ze tego nigdy nie robilem a akurat nie mam jak sprawdzic, ale zobacz to:
  1. UPDATE tabela SET id=IF(id=3,7,3) WHERE id IN (3,7)
Saddam92
#1062 - Duplicate entry '7' for key 1


nikt nie ma pomyslu??
nospor
Faktycznie, niepomyślalem ze ID to ID (czyli ze ma uniqa). Gdyby nie ten uniq to zapytanie by smigalo az milo.

Jedyne co mi przychodzi do glowy to skrocenie tego do dwoch zapytan:
  1. UPDATE tabela SET id=IF(id=3,-3,-7) WHERE id IN (3,7);
  2. UPDATE tabela SET id=IF(id=-3,7,3) WHERE id IN (-3,-7)
Saddam92
ok dzięki a jak rozwiązywane są z reguły skrypt z listami na których można dany element przenieść do góry lub do dołu questionmark.gif czy one działają właśnie na id, czy tez mają osobną kolumnę np. kolejnosc questionmark.gif
Aztech
Jeśli chcesz używać coś i wyświetlać w kolejności, to powinieneś dodać sobie dodatkową kolumnę. Wyobraź sobie sytuację, że masz gdzieś w innej tabeli odwołanie to twojego wpisu o ID=3 i tam jest np wartość 100zł a w ID=7 jest 5000zł, zamiana, którą zrobisz będzie tragiczna w skutkach.
Jeśli to co robisz to tylko zmienianie kolejności to dodatkowa kolumna powinna być w porządku. Jeśli ma być więcej zagłębień to poszukaj w sieci: nested sets.
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.