Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sumowanie wierszy mysql
Forum PHP.pl > Forum > Bazy danych > MySQL
Duo
Witam !
Mam bazę danych gdzie są 2 tabele jedna się nazywa bf1, a druga bf2. Chciałbym, aby z tabeli bf1 wierszami były skopiowane kolumny takie jak:
knife, pistol, sniper, support jak i z drugiej tabeli (bf2) shotgun, smg, rifle, grenade Chciałbym aby z tych dwóch tabeli w bf1 powstała kolumna o nazwie kills gdzie byłby ten wynik

Przedstawię to matematycznie
knife+pistol+sniper+support+shotgun+smg+rifle+grenade= kills

Nie znam się jeszcze dosyć dobrze na mysql, ale próbowałem selectem z jednej tabeli wyciągnąć, próbowałem coś takiego
SELECT (knife + pistol + sniper + support) AS kills FROM bf2

tylko jak jeszcze do tego zsumować tą drugą tabelę? Po wpisaniu tego pojawiła mi się jedna kolumna kills, tylko za bardzo nie wiem jak ją wrzucić do tabeli bf1
Sephirus
Samo sumowanie całości to prosty select z joinem:

(założyłem, że robisz to dla danych użytkowników, których ID znajdują się w polach id_user w obu tabelkach

  1. SELECT (bf1.knife + bf1.pistol + bf1.sniper + bf1.support + bf2.shotgun + bf2.smg + bf2.rifle + bf2.grenade) AS kills FROM bf1 JOIN bf2 ON bf1.id_user = bf2.id_user


Jeśli chodzi o przerzucenie tego do pola kills to nawet nie musisz tego robić - bo możesz po prostu wykonywać to zapytanie i masz wynik, a jeśli na tym kills Ci bardzo zależy to proponuje ze względów wydajnościowych przy każdej zmianie jakiegokolwiek parametru w bf2 i bf1 zwiększać o tyle samo bf1.kills - nie będzie potrzeby późniejszych zmian.
Duo
Potrzebuję tylko jednorazowego zsumowania, wcześniej tworząc skrypt popełniłem błąd z czego aktualnie kolumna kills jest źle policzona.

Nie za bardzo wiem jak po tym SELECT (po uzyskaniu zsumowania) wrzucić ją do tabeli bf1.

Pozdrawiam i bardzo dziękuję
Sephirus
Hmm najbezpieczniej będzie zrobić coś takiego przy założeniu że potrzebujesz to zrobić raz:

(dalej zakładam że użytkowników poznajesz po id_user)

  1.  
  2. $q = mysql_query('SELECT bf1.id_user, (bf1.knife + bf1.pistol + bf1.sniper + bf1.support + bf2.shotgun + bf2.smg + bf2.rifle + bf2.grenade) AS kills FROM bf1 JOIN bf2 ON bf1.id_user = bf2.id_user') or die(mysql_error());
  3.  
  4. while($r = mysql_fetch_assoc($q))
  5. {
  6. mysql_query('UPDATE bf1 SET kills = '.$r['kills'].' WHERE id_user = '.$r['id_user']);
  7. }
  8.  



Tylko w zależności od tego jak dużo masz rekordów to może parę ułamków sekund zająć smile.gif
Duo
dodałem na końcu tego
  1. mysql_query('UPDATE bf1 SET kills = '.$r['kills'].' WHERE id_user = '.$r['id_user']);

to


wyskoczył taki błąd
Kod
Udało się połšczyć z serwerem!
Udało się połšczyć z bazš dancych!Unknown column 'Stejsi' in 'where clause'


Dodałem kills w cudzysłów
tak wygląda teraz
  1. mysql_query('UPDATE bf1 SET "kills" = '.$r['kills'].' WHERE id_user = '.$r['id_user']);


gdzie teraz wyskakuje
Kod
Udało się połšczyć z serwerem!
Udało się połšczyć z bazš dancych!You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"kills" = 120 WHERE id_user = Stejsi' at line 1


Stejsi jest to jedna wartość z kolumny id_user
Sephirus
aaa to nie masz ID numerycznego ;P ok

  1. mysql_query("UPDATE bf1 SET kills = ".$r['kills']." WHERE id_user = '".$r['id_user']."'");
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.