Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][mysql]zamiana numerami wybranych rekordów
Saddam92
post 7.07.2007, 20:16:28
Post #1





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 17.11.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post 7.07.2007, 20:58:29
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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)


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Saddam92
post 8.07.2007, 21:31:49
Post #3





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 17.11.2006

Ostrzeżenie: (0%)
-----


#1062 - Duplicate entry '7' for key 1


nikt nie ma pomyslu??

Ten post edytował Saddam92 7.07.2007, 21:37:37
Go to the top of the page
+Quote Post
nospor
post 9.07.2007, 06:13:37
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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)


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Saddam92
post 9.07.2007, 12:02:15
Post #5





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 17.11.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Aztech
post 9.07.2007, 15:56:57
Post #6





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 21:53