Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Problem z zapytaniem i pustymi wynikami (UNION)
kubalone
post 30.01.2011, 19:58:39
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 7.03.2010

Ostrzeżenie: (0%)
-----


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)

Go to the top of the page
+Quote Post
ixpack
post 30.01.2011, 21:57:16
Post #2





Grupa: Zarejestrowani
Postów: 248
Pomógł: 55
Dołączył: 1.06.2010
Skąd: mam to wiedzieć?

Ostrzeżenie: (0%)
-----


IFNULL(tabela.kolumna, COŚ) - gdzie COŚ to na przykład 0


--------------------
Łatwo jest być odważnym za murami własnego zamku.
Go to the top of the page
+Quote Post
kubalone
post 31.01.2011, 09:33:34
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 7.03.2010

Ostrzeżenie: (0%)
-----


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')
Go to the top of the page
+Quote Post
ixpack
post 1.02.2011, 11:44:09
Post #4





Grupa: Zarejestrowani
Postów: 248
Pomógł: 55
Dołączył: 1.06.2010
Skąd: mam to wiedzieć?

Ostrzeżenie: (0%)
-----


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 ;]


--------------------
Łatwo jest być odważnym za murami własnego zamku.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 30.06.2025 - 22:10