Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Sumowanie danych z całej kolumy.
pawelooss
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 27.09.2009
Skąd: Ruda Śląska

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


Witam!

Jako iż sam sobie nie umiem z tym poradzić, chciałem zwrócić się do ekspertów z prośbą o pomoc. winksmiley.jpg


Mam 2 tabele `posiadanie` i `dostanie`.

Tabela `posiadanie` obrazowo opisuje taką sytuację, że np.:
- Jacek ma 0 jabłek.
- Agata ma 2 jabłka.

Jej struktura wygląda więc następująco:
Kod
`imie`  | `ilosc_ma`
`Jacek` | 0
`Agata` | 2



Tabela `dostanie` obrazowo opisuje taką sytuację, że np.:
- Jacek dostał 5 jabłek.
- Agata dostała 3 jabłka.
- Jacek dostał 9 jabłek.

Jej struktura wygląda więc następująco:
Kod
`imie`  | `ilosc_dostal`
`Jacek` | 5
`Agata` | 3
`Jacek` | 9



Chciałbym zwiększyć ilość tych jabłek w tabeli `posiadanie` o dane z tabeli `dostanie`, żeby na końcu okazało się, że np.:
- Jacek ma 14 jabłek.
- Agata ma 5 jabłek.


Próbowałem zapytania:
  1. UPDATE `posiadanie` SET `ilosc_ma` = `ilosc_ma` + (SELECT `ilosc_dostal` FROM `dostanie` WHERE `posiadanie`.`imie` = `dostanie`.`imie`);

lecz wyświetliło mi błąd:
Kod
Subquery returns more than 1 row



Pewnie rozwiązanie będzie w miarę proste, ale nie umiem samodzielnie na nie wpaść. Proszę o pomoc! Odpowiedzi wynagrodzę oczywiście pochwałą. winksmiley.jpg

Pozdrawiam,
pawelooss
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Spróbuj tak
  1. UPDATE `posiadanie` SET `ilosc_ma` = `ilosc_ma` + (SELECT sum(`ilosc_dostal`) FROM `dostanie` WHERE `posiadanie`.`imie` = `dostanie`.`imie`);



--------------------
Go to the top of the page
+Quote Post
pawelooss
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 27.09.2009
Skąd: Ruda Śląska

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


OK, działa, ale mieli bardzo długo. Pewną bazę na localhoście przerobiło mi w ok. 6 minut, ale już trzy razy większą próbuje od godziny i końca nie widać.

Może jest jakieś inne rozwiązanie? Myślę, że o wiele wydajniejszym może być nawet zwykłe PHP + SQL od samego SQL, tych jak to napisać? ;>


Z góry dzięki za pomoc i wskazówki. winksmiley.jpg

Pozdrawiam,
pawelooss
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Załóż index na pole imie oraz na pole ilosc_dostal (typ indexu "INDEX") na pewno pomoże.
Jeżeli nadal wynik będzie dość słaby to możesz wykonywać taką operację w php krok po kroku
1) Pobranie sumy ilosc_dostal dla podanego imienia
2) Update rekordów, które to imie zawierają.
Niestety nie powiem Ci czy byłoby to znacznie szybsze aczkolwiek dzieki temu będziesz śledził postęp operacji.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 19:06