Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Problem z zapytaniem i pustymi wynikami (UNION)
Forum PHP.pl > Forum > Przedszkole
kubalone
Witam, robie taki mini system statystyk, z każdego dnia potrzebuje liczbe odsłon, chciałem połączyć to w jednym zapytaniu ale pojawił się problem, mianowicie kiedy pytam baze o np 20 dni ona zwraca mi tablice tylko z tymi dniami w których była jakaś liczba odsłon, nie wiem czy zrozumiale się wyraziłem, chodzi o to że jeśli ja go prosze o 20 dni to chciałbym żeby zwrócił tablice 20 elementową a nie np. 15, nawet jeśli nie znalazłby pozycji w bazie dla danego zapytania. Może jakiś warunek IF?
Proszę o pomoc.

  1. (SELECT count(DISTINCT ip),count(ip) FROM zliczenia WHERE $rok $miesiac $dzien)
  2. UNION
  3. (SELECT count(DISTINCT ip),count(ip) FROM zliczenia WHERE $rok $miesiac $dzien)
  4. UNION
  5. (SELECT count(DISTINCT ip),count(ip) FROM zliczenia WHERE $rok $miesiac $dzien)
  6. UNION
  7. (SELECT count(DISTINCT ip),count(ip) FROM zliczenia WHERE $rok $miesiac $dzien)
  8. UNION
  9. (SELECT count(DISTINCT ip),count(ip) FROM zliczenia WHERE $rok $miesiac $dzien)
  10. UNION
  11. (SELECT count(DISTINCT ip),count(ip) FROM zliczenia WHERE $rok $miesiac $dzien)

ixpack
IFNULL(tabela.kolumna, COŚ) - gdzie COŚ to na przykład 0
kubalone
Tworzę zapytanie w ten sposób ale wciąż brak wyników... co robię źle?
  1. (SELECT IFNULL(count(DISTINCT ip),0),IFNULL(count(ip),0) FROM zliczenia WHERE rok='2011' AND miesiac='1' AND dzien='1')
  2. UNION
  3. (SELECT IFNULL(count(DISTINCT ip),0),IFNULL(count(ip),0) FROM zliczenia WHERE rok='2011' AND miesiac='1' AND dzien='2')
  4. UNION
  5. (SELECT IFNULL(count(DISTINCT ip),0),IFNULL(count(ip),0) FROM zliczenia WHERE rok='2011' AND miesiac='1' AND dzien='3')
ixpack
IFNULL sprawdza czy masz pusty rekord, ale u Ciebie nie ma możliwości wystąpienia pustego rekordu.
Musiałbyś dodać kolejną tabelę, ale to wszystko trochę mija się z celem imo.

Sformatuj wynik w php i tak np.

*Chcesz wyświetlić 10 dni.

Tworzysz tablicę asoc. dla danych z bazy, tak aby:
$tablica[licznik][dzien] = 'ilosc odwiedzin';

Lub łączysz dzien, miesiac rok w jedno (CONCAT chyba) - i masz $tablica[licznik][dzienmiesiacrok]
Czyli 2gi nawias kwadratowy to [112011] albo [1]
W php tworzysz pętlę for - dla 10 dni, czyli dla 112011, 212011 ... 1012011
wiedząc, że zmieniają się tylko dni, to bym to zrobił tak:

  1. $ilosc_dni = 10;
  2. $tablica_wynikow = //(tablica asoc. z wyniku mysql - czyli np. $tablica_wynikow[0][112011] = '5'; $tablica_wynikow[1][112011] =ip.ip.ip.ipl //ilosc odwiedzin i ip);
  3.  
  4. for ($i=1; $dzien = $ilosc_dni; $i++) {
  5.  
  6. //pokazujemy rekord z dnia 1 czyli np.
  7. if (empty($tablica_wynikow[0][$i.'12011'])) echo 'zero odwiedzin<br />';
  8. else echo $tabela_wynikow[1][$i.'12011'].'<br />'; //pokaze nam ilosc odwiedzin;
  9.  
  10. /*
  11. etc
  12.  
  13. a tu masz funkcję aby przypisac wynik do tablicy asoc.:
  14.  
  15. po polaczeniu przez np mysqli i po wykonaniu query
  16. dajesz $wynik = create_array($data); i masz tablicę oczywiście $data to wynik działania query
  17.  
  18. function create_array($data)
  19. {
  20.   $new_arrray = array();
  21.  
  22.   for ($i=0; $row = $data->fetch_assoc(); $i++)
  23.   $new_array[$i] = $row;
  24.  
  25.   return $new_array;
  26. }
  27.  
  28. a jak pdo używasz (polecam) to możesz łatwo to zrobić tak:
  29.  
  30. $tablica = array();
  31. for ($i=0; $row = $dane_zbazy->fetch(PDO::FETCH_ASSOC); $i++) $tablica[$i] = $row;
  32.  
  33.  
  34. }


Chyba rozumiesz o co mi chodzi? Na szybko pisałem więc może być coś nie tak ;]
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.