Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zamiana miejscami rekordów
Forum PHP.pl > Forum > Bazy danych > MySQL
shpyo
Witam,
czy wiem ktoś czy jest jakaś komenda w mysql która zamienia miejscami ze sobą dwa rekordy (np. o id=2 i id=5) questionmark.gif

php mogę to zrobić ale to będzie aż 4 zapytabia do bazy:
- zanaczenie rekordu o id=2
- zanaczenie rekordu o id=5
- zapisanie tego co jest w 2 na 5
- zapisanie tego co jest w 5 na 2

Można to zrobić szybciej w mysql?

pozdr,
DeyV
  1. UPDATE tabela SET
  2. id = ( IF( id==5, 2, 5) )
  3. WHERE id IN (2, 5)


Ale swoją drogą - jest to raczej mało logiczne żądanie, i naprawdę trudno mi wymyślić sytuację, gdzie taka operacja byłaby konieczna.

Niestety - rozwiązanie takie nie zadziała (chyba winksmiley.jpg ) jeżeli Id jest kluczem głównym, czyli unikalnym.
shpyo
id jest kluczem głównym i raczej nie zadziała :/
będę musiał się chyba poratować phpem
Lardux
mozna wiedziec po co chcesz to zamieniac? przeciez skoro cos zrobiles kluczem glownym to chyba wlasnie po to aby dany rekord byl jednoznacznie identyfikowalny prawda? a w momencie kiedy pozwolisz na takie zamiany to juz ten warunek nie bedzie spelniony, ale jesli np ma to sluzyc kolejnosci wyswietlania to mozesz dodac kolejna kolumne w ktorej bys sobie wlasnie sposobem opisanym wyzej wszystko ustawial, jezeli natomiast chodzi dokladnie o zamiane wartosci rekordu o id=2 z tym o id=5 to przeciez mozesz zawsze napisac sqla ktory zamieni ci wszystkie pola zostawiajac id nie zmienione - efekt bedzie ten sam...
TomASS
Utwórz pole o nazwie kolejnośc i je zmieniaj, a później:
  1. SELECT *
  2. FROM tabela ORDER BY kolejnosc;

Przecierz nie ma najmniejszego sensu zmiana klucza głównego i unikalnego tabeli.
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.