Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] UPDATE + CASE
Forum PHP.pl > Forum > Przedszkole
kamil_lk
Cześć.
Napisałem sobie funkcję do sortowania obiektów w tabeli.
Sęk w tym, że gdy dodaję rozróżnienie na typ obiektu to zapytanie update zamienia mi wszystkie pozycje na 0.
  1. $query = "UPDATE `survey_objects` SET `position` = CASE `id_object`";
  2. foreach($sort_list as $key => $value){
  3. foreach($value as $key2 => $value2){
  4. $query .= " WHEN " . $value2 . " AND `id_object_type` = ".$key." THEN " . $key2;
  5. }
  6. }
  7. $query .= " END WHERE `id_survey` = :id_survey";


Powyższa funkcja zwraca takie oto zapytanie:
  1. UPDATE `survey_objects` SET `position` =
  2. CASE `id_object`
  3. WHEN 7 AND `id_object_type` = 5 THEN 1
  4. WHEN 8 AND `id_object_type` = 5 THEN 2
  5. WHEN 9 AND `id_object_type` = 5 THEN 3
  6. WHEN 6 AND `id_object_type` = 5 THEN 4
  7. END
  8. WHERE `id_survey` = 1


Czy ten zapis jest poprawny?
Jeżeli nie to gdzie leży problem i jak mogę go rozwiązać?
Pyton_000
Albo:
  1. UPDATE `survey_objects` SET `position` =
  2. CASE `id_object`
  3. WHEN 7 THEN 1
  4. WHEN 8 THEN 2
  5. WHEN 9 THEN 3
  6. WHEN 6 THEN 4
  7. END
  8. WHERE `id_survey` = 1 AND `id_object_type` = 5


Albo
  1. UPDATE `survey_objects` SET `position` =
  2. CASE
  3. WHEN `id_object` = 7 AND `id_object_type` = 5 THEN 1
  4. WHEN `id_object` = 8 AND `id_object_type` = 5 THEN 2
  5. WHEN `id_object` = 9 AND `id_object_type` = 5 THEN 3
  6. WHEN `id_object` = 6 AND `id_object_type` = 5 THEN 4
  7. END
  8. WHERE `id_survey` = 1
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.