Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Sumowanie danych z całej kolumy.
Forum PHP.pl > Forum > Przedszkole
pawelooss
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
wookieb
Spróbuj tak
  1. UPDATE `posiadanie` SET `ilosc_ma` = `ilosc_ma` + (SELECT sum(`ilosc_dostal`) FROM `dostanie` WHERE `posiadanie`.`imie` = `dostanie`.`imie`);

pawelooss
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
wookieb
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.
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.