Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]SELECT SUM podwojny wynik
Forum PHP.pl > Forum > Przedszkole
Bartek007c2
Witam
mam taki oto kodzik sumujący liczbę odwiedzin z poszczególnych miesięcy
  1. $f = $main->messagemysql($_SESSION['firma']);
  2. $suma = (int)0;
  3. $i =0;
  4. $sqli= $db->query("SELECT DISTINCT `datam` , `datay` FROM `licznik` WHERE `firma` = '{$f}' ORDER BY `data` DESC LIMIT 12");
  5. while($rowy = $sqli->fetch_assoc()) {
  6. $msc = $rowy['datam'] ;
  7. $year= $rowy['datay'];
  8. $sqli2= $db->query("SELECT DISTINCT SUM(`licznik`) FROM `licznik` WHERE `firma` = '{$f}' AND `datam` = '{$msc}' AND `datay` = '{$year}'LIMIT 1");
  9.  
  10. while($rowy2 = $sqli2 ->fetch_array()) {
  11. $txt = '';
  12. $txt = implode(' ',$rowy2);
  13. $data .= $msc.".".$year."{".$txt."}";
  14. }
  15. }
  16. echo $data;


Niestaty jest jakis problem nianowicie wynik wygląda tak
1.2017{44 44}12.2016{72 72}10.2016{1 1}
wartości z drugiego zapytania tzn sumy są wyswietlane podwójnie. Nie mam juz pomysłów co robię źle
trueblue
Niepotrzebne są pola datam oraz datay, rok i miesiąc są zawarte w polu data.

Całość można wykonać jednym zapytaniem:

  1. SELECT DATE_FORMAT(DATA,'%Y-%m') AS rok_miesiac, SUM(licznik)
  2. FROM licznik
  3. WHERE firma='X'
  4. GROUP BY rok_miesiac
  5. ORDER BY rok_miesiac DESC
  6. LIMIT 0,12
Bartek007c2
Oki a co oznacza AS w zapytaniu?
trueblue
Jest to alias, czyli zamiennik nazwy.
Przydaje się przy duplikatach nazw jeśli wybieramy z dwóch tabel lub w przypadku funkcji grupujących.
W tym drugim przypadku mając: SUM(licznik) AS suma_wyswietlen, pobierając dane do tabeli asocjacyjnej będziesz mieć je dostępne pod indeksem 'suma_wyswietlen' (np. $rowy['suma_wyswietlen'])
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.