Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] Zapytanie UPDATE
Forum PHP.pl > Forum > Przedszkole
Hazel
Jak za pomocą jednego zapytania zmienić wartość w komórkach tabeli, w których wartość jest maksymalną wartością z danej kolumny? Na przykład:

W kolumnie x mamy wartości: 1,1,1,1,2,2,2,3,3,3,3,4,4,4,4,4

Chciałbym nadpisać jakąś inną koumnę w tej tabeli inną wartością, ale tylko te wiersze, w których w kolumnie x jest 4. Jak to zrobić? Mogę pobrać selectem i wtedy obrobić w PHP, ale to będzie nieoptymalne.

edyta: znalazłem w necie coś, co jest dostępne od MySQL 4.0.0:
  1. UPDATE items SET id=id+1 ORDER BY id DESC;

To by mi pomogło, ale mam starszą wersję SQL sad.gif
lukaszgolder
OMFG. To jakiej wersji MySQLa ty używasz że wersja 4.0.0 jest starsza?
Hazel
Serwer, na którym stoi portal, używa 3.23.41 bodaj. Proszę nie komentować postępowania adminów serwera, bo to ja też potrafię zrobić, tylko zamienić to zapytanie na jakieś inne tongue.gif Jakieś pomysły?
ddiceman
Nie zoptymalizujesz tego duzo bardziej z prostego powodu: informacja o najwiekszej wartosci w kolumnie nie jest trzymana w informacjach o strukturze bazy danych, co oznacza, ze kazdorazowo musi zostac wyliczona poprzez przesledzenie wszystkich analizowanych wierszy. Co za tym idzie - nie da sie w jednym przebiegu znalezc maksymalnej wartosci i jednoczesnie ja zamienic na inna: w polowie tabeli MySQL nie moze przeciez wiedziec, co ma poprawiac, skoro aktualna w tym momencie wartosc maksymalna moze jeszce urosnac. Przez to MySQL zawsze bedzie musial zrobic 2 przebiegi - 1. zeby znalezc maksymalna wartosc, 2. zeby ja poprawic na inna.
A w rzeczy, ktora znalazles nie bedziesz wiedzial, ile tych wartosci poprawic... (limit X?)
Hazel
Ok, dzięki za wyjaśnienie. Wyprowadziłem sobie dodatkową zmienną w PHP, którą wprawdzie w specyficznych przypadkach trzeba pobierać z bazy, ale często da się ją obliczyć z danych, które pobieram przy innej okazji, więc jest nieco lepiej niż było. Teraz już wiem co zrobić, chociaż to będzie zdecydowanie bardziej skomplikowane niż mi się na początku wydawało.
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.