Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zamiana zawartości pól między rekordami w jednym zapytaniu
Forum PHP.pl > Forum > Bazy danych > MySQL
djlinux
Witam
Posiadam sobie tabelke:
  1. +----+-------------+
  2. | id | description |
  3. +----+-------------+
  4. | 13 | taka |
  5. | 14 | taka |
  6. | 15 | tamto |
  7. +----+-------------+

Czy jednym zapytaniem mogę zmienić zawartość description przy id=13 z zawartością pola description z id=15?
erix
Jednym raczej nie. Musisz jednemu dać jakiś ID poza zbiorem, wstawić drugi na jego miejsce i pierwszemu zmienić.
djlinux
Dzięki za odpowiedź.
Zastanawiam się nad czymś takim:
  1. +----+-------+-------------+
  2. | id | ORDER | description |
  3. +----+-------+-------------+
  4. | 13 | 13 | taka |
  5. | 14 | 14 | taka |
  6. | 15 | 15 | tamto |
  7. +----+-------+-------------+

Mam do tego 2 pytania:
1) Czy w jednym zapytaniu z poziomu php da się jakoś wstawić kopie zawartości pola id( autoincrement) do pola order?
2) Jak efektywnie uaktualnić pole order w takiej tabeli gdybym chciał wykorzystać go do pewnego uporządkowania (w interfejsie przewiduje przyciski typu "przenieś w górę/dół")?
Chętnie przeczytam czyjeś rozwiązania takiego typu.
erix
Cytat
1) Czy w jednym zapytaniu z poziomu php da się jakoś wstawić kopie zawartości pola id( autoincrement) do pola order?

Masz na myśli:
  1. UPDATE TABLE SET `order`=id WHERE id=X

?

Cytat
2) Jak efektywnie uaktualnić pole order w takiej tabeli gdybym chciał wykorzystać go do pewnego uporządkowania (w interfejsie przewiduje przyciski typu "przenieś w górę/dół")?

Zrób sobie może procedurę?
djlinux
Ad 1. Tak, o coś takiego mi chodzi, czy nie da się tego jakoś szybciej? W momencie tworzeniu tego rekordu.
Ad 2. Dzięki, dobry pomysł, bo wystarczy tylko jedno zapytanie wysłane przez php smile.gif
erix
Cytat
Ad 1. Tak, o coś takiego mi chodzi, czy nie da się tego jakoś szybciej? W momencie tworzeniu tego rekordu.

Ostatecznie można, ale nie ma sensu popadać w aż taką paranoję. Lepiej więcej mało zasobożernych zapytań niż jedno bardzo.

Ale na upartego, to można robić analogicznie, jak to DBMS robi:
  1. INSERT INTO tabela VALUES (NULL, (SELECT MAX(id)+1 FROM tabela))
djlinux
Cytat(erix @ 22.07.2009, 21:11:34 ) *
...
  1. INSERT INTO tabela VALUES (NULL, (SELECT MAX(id)+1 FROM tabela))

  1. ERROR 1093 (HY000): You can't specify target table 'photos' for update in FROM clause

Moja baza to MySQL 5, nie wiem czy to ma prawo działać dry.gif
W każdym razie wielkie dzięki za cenne rady smile.gif
erix
Możliwe, że trzeba wynik zadeklarować do zmiennej, nie korzystam z takich obejść, więc ciężko w ciemno powiedzieć ;p
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.