Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] Zapytanie UPDATE
Hazel
post
Post #1





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


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 (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Ten post edytował Hazel 12.03.2009, 14:55:50
Go to the top of the page
+Quote Post
lukaszgolder
post
Post #2





Grupa: Zarejestrowani
Postów: 141
Pomógł: 17
Dołączył: 2.04.2008
Skąd: z Zabrza

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


OMFG. To jakiej wersji MySQLa ty używasz że wersja 4.0.0 jest starsza?
Go to the top of the page
+Quote Post
Hazel
post
Post #3





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Jakieś pomysły?
Go to the top of the page
+Quote Post
ddiceman
post
Post #4





Grupa: Zarejestrowani
Postów: 326
Pomógł: 121
Dołączył: 23.07.2008
Skąd: Wrocław

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


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?)
Go to the top of the page
+Quote Post
Hazel
post
Post #5





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


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

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

 



RSS Aktualny czas: 23.08.2025 - 09:50