Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie Mysql odejmowanie kolumn
Forum PHP.pl > Forum > Bazy danych > MySQL
bananoke
Witajcie,

mam problem z napisaniem pewnego zapytania.
Mam 2 tabele users i users2 każda z tabel ma 29 różnych kolumn jednak skupiamy się na dwóch,
pierwsza to id i druga ptk. Id to unikalny numer każdego użytkownika a ptk to liczba jego punktów.
Users od Users2 różni się jedynie liczbą punktów użytkowników. Jak mogę odjąć sume jednej kolumny ptk od drugiej?

SELECT users.ptk, users2b.ptk AS ptk2
FROM users
RIGHT OUTER JOIN (SELECT uid, ptk FROM users2) AS users2b
ON users.uid = users2b.uid

Tym zapytaniem wywołałem 2 kolumny które chciałbym od siebie odjąć jednak nie mam za pomysłu jak to zrobić.
Mogę liczyć na Waszą pomoc?
thek
Pytanie zasadnicze: "Co rozumiesz przez suma jednej kolumny i suma 2 kolumny?"
Czy chodzi Ci o fakt, że bierzesz obie tabele i łączysz po tym samym id i wartość jednej kolumny dla danego id odejmujesz od drugiej, czy sumujesz punkty dla całej tabeli 1, sumujesz wszystkie punkty z tabeli 2 i dopiero teraz odejmujesz?
Jeśli to pierwsze to po prostu JOIN po numerze id i jedna z kolumn wyniku w select to będzie różnica obu kolumn wybranych.
Jeśli to drugie to zamiast kombinować z jakimiś powalonymi JOINami zakręconymi jak stado pędzących śrubek, zrób po zapytaniu sumującym dla każdej z tabel i po stronie skryptu php już odejmij. Powinno to być wydajniejsze. Dwa proste zapytania wykonają się zazwyczaj szybciej niż jedno skomplikowane.
bananoke
Cytat(thek @ 7.03.2011, 10:41:31 ) *
Pytanie zasadnicze: "Co rozumiesz przez suma jednej kolumny i suma 2 kolumny?"
Czy chodzi Ci o fakt, że bierzesz obie tabele i łączysz po tym samym id i wartość jednej kolumny dla danego id odejmujesz od drugiej, czy sumujesz punkty dla całej tabeli 1, sumujesz wszystkie punkty z tabeli 2 i dopiero teraz odejmujesz?
Jeśli to pierwsze to po prostu JOIN po numerze id i jedna z kolumn wyniku w select to będzie różnica obu kolumn wybranych.
Jeśli to drugie to zamiast kombinować z jakimiś powalonymi JOINami zakręconymi jak stado pędzących śrubek, zrób po zapytaniu sumującym dla każdej z tabel i po stronie skryptu php już odejmij. Powinno to być wydajniejsze. Dwa proste zapytania wykonają się zazwyczaj szybciej niż jedno skomplikowane.


W gruncie rzeczy chodzi mi o sprawdzenie różnicy PKT z obu tabel. Jedna tabela ma date z lutego druga ma date z marca i chciałbym sprawdzić o ile wartość pkt wzrosła dla każdego użytkownika z osobna. Żadnych kolumn nie sumujemy. Czy mogłbyś pomoc mi skonstruować pełne zapytanie, kombinowałem ale nie idzie mi=/
thek
  1. SELECT b.id, IF (a.ptk IS NULL, b.ptk, b.ptk - a.ptk) AS roznica FROM users AS a RIGHT JOIN users2 AS b ON a.id = b.id
Bierzesz tabele (ja nadałem im aliasy by było lepiej widoczne) i łączysz po id. Może się zdarzyć, że user z danego miesiąca jest nowy i nie istniał w poprzednim miesiącu, stąd późniejszy MOŻE mieć więcej userów i to on jest dla mnie bazowym. Przy próbie JOINa używam więc RIGHT i jeśli tak się stanie to w wyniku a.ptk nie będzie istniało i baza da mi tam NULL zapewne. By to ominąć przy liczeniu różnicy sprawdzam czy kolumna pkt dla miesiąca wcześniejszego wywali mi NULL. Jeśli tak, to biorę pod uwagę tylko stan na ostatni miesiąc jako różnica. Jeśli są wartości w obu miesiącach to liczę różnicę.
bananoke
dokladnie o to chodzilo jestes wielki smile.gif dziekuje
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.