Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Niewidzialne mnożenie
Forum PHP.pl > Forum > Bazy danych > MySQL
Gigante
  1. SELECT nazwa, SUM(wejscia) AS wejsc FROM gry,statystyki,tagi WHERE statystyki.data>=".(time()-(60*60*24*2))." AND gry.id=tagi.id AND gry.id=statystyki.id AND tagi.id NOT IN (SELECT DISTINCT id FROM tagi WHERE url='play-by-forum' OR url='pbf' OR url='mikronacja' OR url='mikronacje') GROUP BY statystyki.id HAVING wejsc>=5 ORDER BY wejsc DESC
  2.  

zwraca unikalne nazwy i sume wejsc - to działa poprawnie winksmiley.jpg

ale przy okazji robi mnożenie zwracanej sumy o ilosc tagow z tabeli TAGI efekt nieporzadany, ma nie mnozyc smile.gif chyba ze przez 1

np: suma wejsc z 2 ostatnich dni wynosi: 5
wpis posiada 4 tagi (zapisywane sa w osobnych wierszach)
wyswietlany wynik to 20 (5 x 4)

negacje probowalem robic poprzez != i <> ale nadal wyswietlalo wpisy zawierajacy dany tag np:
  1. SELECT nazwa,SUM(wejscia) AS wejsc FROM gry,statystyki,tagi WHERE statystyki.data>=".(time()-(60*60*24*7))." AND tagi.url!='mikronacja' AND gry.id=tagi.id AND gry.id=statystyki.id GROUP BY statystyki.id HAVING wejsc>=1 ORDER BY wejsc DESC
  2.  
thek
Tak masz na własne życzenie poprzez iloczyn kartezjański. Robisz
FROM gry,statystyki,tagi
A w wyniku:
SUM(wejscia) AS wejsc
Jako że masz z powodu takiego łączenia we FROM niezły bajzel, to zwraca Ci masę dubli pasujących do warunku. A że potem robisz sumowanie tego to masz efekt o jakim wspominasz. Zrób sensowniejsze łączenie tabel to od razu Ci się wszystko zredukuje w wynikach.

piotrooo89
albo za pomocą aliasów do tabel wybieraj kolumny tylko z tych tabel które Cię interesują.
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.