![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 26.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam , mam pytanie.
Czy istnieje konstrukcja zapytania UPDATE , podobna do konstrukcji zapytania INSERT ? Chodzi mi dokładnie o coś takiego:
Czy jeżeli chce zrobić update wielu wierszy , każdy o innym id , to muszę za każdym razem wysyłać zapytanie do bazy o każdy zmieniany wiersz ? Nie da się wysłać jednego dużego zapytania jak w konstrukcji INSERT ? A może skorzystać z instrukcji INSERT ON DUPLICATE KEY UPDATE ? Pytam ponieważ potrzebuje "zoptymalizować" ruch sieciowy i wysyłać jak najmniej pakietów. Lepiej wysłać jeden duży niż kilka małych. Pozdrawiam i dziękuje za wszelaką pomoc. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
może WHERE id IN(...)
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 26.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Może i to by działało , tylko jak teraz podać wartości które chciałbym wstawić w poszczególne id ?
Dopóki jest coś takiego :
To wszystko jest dobrze i robi się update wierszy o id 1,2,3. Jednak jeżeli chciałbym wprowadzić różne wartości dla każdego id to jakbym miał to zapisać ? Coś takiego niestety wyrzuca błąd o tym iż nie istnieją kolumny:
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
Nie no tak to się nie da.
-------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 171 Pomógł: 18 Dołączył: 13.03.2009 Skąd: lublin Ostrzeżenie: (0%) ![]() ![]() |
wgraj te dane które chcesz poprawić do jakiejś tabeli tymczasowej a następnie skorzystaj z Join-a
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 26.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Też mnie to nie urządza, wyjaśnie dlaczego.
Otóż odpytuje cykliczne jakieś urządzenie, które zwraca mi dane , te natomiast są w moim programie porównywane ze starymi danymi i wysyłane dalej do bazy tylko te które się zmieniły. Jednak taki cykl odbywa się co sekundę , dlatego musiałbym w każdym cyklu tworzyć i usuwać tabele tymczasową. I wysyłać minimum 4 zapytania. Nawet jeżeli wystąpiłby tylko 1 Update... Tak się zastanawiam czy to ma sens. Kiedy wystąpiłby update 5 i więcej wierszy naraz to pewnie by miało. Ale dzięki za pomoc. Przemyśle czy w ten sposób warto to zrobić. Jakby jednak dało się jednym zapytaniem zmienić wszystko byłoby milej i pewniej. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 171 Pomógł: 18 Dołączył: 13.03.2009 Skąd: lublin Ostrzeżenie: (0%) ![]() ![]() |
to xrób tabele na stałe!
później robisz
Ten post edytował prachwal 26.03.2011, 21:50:27 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 30 Dołączył: 19.02.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Skoro takie aktualizacje chcesz robić często, to spróbuj innego chwytu:
1. PREPARE - przygotowujesz instrukcję (1 raz na początku). W treści mogą być znaki "?" (placeholdery) - miejsca na podstawienie konkretnych wartości. 2. EXECUTE ... USING <lista wartości> - właściwe wykonanie. Zysk polega na szybkości, bo PREPARE wykonujesz 1 raz, a potem taką instrukcję możesz wielokrotnie i szybko wykonać z podstawieniem konkretnych wartości. Szczegóły doczytaj na stronie: http://dev.mysql.com/doc/refman/5.1/en/sql...statements.html To co powyżej - wykonujesz na poziomie SQL. Możesz spróbować jeszcze innego wariantu: W ramach biblioteki PDO są funkcje prepare i execute o podobnej funkcjonalności. Zobacz na stronie: http://pl.php.net/manual/pl/pdo.prepare.php Wątpię jednak czy to będzie szybsze. Poza tym pytanie - jaką biblioteką operujesz obecnie na bazie i czy chce Ci się zmieniać na PDO? Na koniec uwaga do propozycji Przedmówcy: W dokumentacji MySQLnie mogę się doszukać opisu zdania UPDATE FROM <tablica>. Czy to na pewno chodzi w MySQL? Ten post edytował Valdi_B 28.03.2011, 08:13:16 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 171 Pomógł: 18 Dołączył: 13.03.2009 Skąd: lublin Ostrzeżenie: (0%) ![]() ![]() |
masz rację słowo FROM jest zbędne
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.06.2025 - 04:39 |