Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MYSQL] Licznik, analiza kodu MySQL, Składnia MySQL !!
DREEMus
post
Post #1





Grupa: Zarejestrowani
Postów: 286
Pomógł: 34
Dołączył: 4.09.2008
Skąd: Wrocław

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


  1. <?php
  2. // stary kod ...
  3. ?>


Streszczając chodzi o to, że licznik dodaje do 3, i potem dopiero wyświetla info "Już tutaj byłeś". Analizowałem kod parę razy, ale dla mnie wygląda dobrze, zmęczony trochę jestem (wiadomo - sobota), ale chyba jeszcze myślę (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

W każdym razie, czy ktoś z Was widzi gdzieś tu błąd (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
I generalnie nie widzę błędu :/ ale gdzieś być musi!

PS. Doszedłem do wniosku, że wartość licznika, policzę "countem" w SQL z tabeli z IP'kami ...


Wersja 2 - działająca (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
  1. <?php
  2. function licznik ($adres) {
  3.    $dbWynik = mysql_query ('SELECT COUNT(adres) AS `ip` FROM `licznik` WHERE `adres` = "' . $adres . '"')
  4.        or die ('<p>Błąd podczas sprawdzania adresu IP</p>');
  5.    $row = mysql_fetch_assoc ($dbWynik);
  6.    if ($row['ip'] == 0) {
  7.        $dbWynik = mysql_query ('SELECT COUNT(id) AS `ile` FROM `licznik`')
  8.            or die ('<p>Błąd przy liczeniu rekordów ...</p>');
  9.        $row = mysql_fetch_assoc ($dbWynik);
  10.        echo $row['ile'] . '. Pierwszy raz :)';
  11.        $dbDodajAdres = mysql_query ('INSERT INTO `licznik` (`id`, `adres`) VALUES (NULL, "' . $adres . '");')
  12.            or die ('<p>Błąd podczas dodawania adresu do bazy ...</p>');
  13.            } else {
  14.                $dbWynik = mysql_query ('SELECT COUNT(id) AS `ile` FROM `licznik`')
  15.                    or die ('<p>Błąd przy liczeniu rekordów ...</p>');
  16.                $row = mysql_fetch_assoc ($dbWynik);
  17.                echo $row['ile'] . '. Już tutaj byłeś :)';
  18.                }
  19.    }
  20. ?>


Aha, IP trzymam, bo sobie statystykę z nich zrobię (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował DREEMus 31.03.2009, 04:40:56
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Masz tu 3 selecty. Na dobrą sprawę można to załatwić jednym. W tym jednym wylicz ilosc wszystkich i ilosc dla danego adresu.

hint: uzyj IF
Go to the top of the page
+Quote Post
DREEMus
post
Post #3





Grupa: Zarejestrowani
Postów: 286
Pomógł: 34
Dołączył: 4.09.2008
Skąd: Wrocław

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


po optymalizacji ...
  1. <?php
  2. function licznik ($adres) {
  3.    $dbWynik = mysql_query ('SELECT COUNT( id ) AS `ile`, COUNT( adres ) AS `ip` FROM `licznik` WHERE `adres` = "' . $adres . '"')
  4.        or die ('<p>Błąd podczas sprawdzania adresu IP</p>');
  5.    $row = mysql_fetch_assoc ($dbWynik);
  6.    if ($row['ip'] == 0) {
  7.        echo $row['ile'] . '. Pierwszy raz ... :)';
  8.        $dbDodajAdres = mysql_query ('INSERT INTO `licznik` (`id`, `adres`, `host`) VALUES (NULL, "' . $adres . '", "' . gethostbyaddr ($adres) . '");')
  9.            or die ('<p>Błąd podczas dodawania adresu do bazy ...</p>');
  10.        } else {
  11.            echo $row['ile'] . '. Już tutaj byłeś! :)';
  12.            }
  13.    }
  14. ?>


W dobrym brzmieniu będzie podziękować (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




szczerze powiedziawszy nie wiem co ty tu teraz splodziles, ale napewno nie o tym ci mowilem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
DREEMus
post
Post #5





Grupa: Zarejestrowani
Postów: 286
Pomógł: 34
Dołączył: 4.09.2008
Skąd: Wrocław

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


Założenie było takie, że:

Wchodzisz na stronę, skrypt sprawdza Twoje IP czy znajduje się w bazie, jak tak wyświetla stan licznika i pokazuje komunikat "Już tutaj byłeś" (co chyba zmienię na "Witamy ponownie!" (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) , jeżeli nie, dodaje IP do bazy i pokazuje "Pierwszy raz ..."

Bo jak inaczej policzyć unikalne wizyty, bez bazy IP (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

I potem, na podstawie IP mogę wykorzystać GeoIP, do swoich statystyk (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Tym samym zdobywać wiedzę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował DREEMus 30.03.2009, 19:58:28
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




no ok, a czemu ma sluzyc to:
COUNT( id ) AS `ile`, COUNT( adres ) AS `ip`
w jednym zapytaniu? czy oba nie count nie zwracają przypadkiem tej samej liczby?
Go to the top of the page
+Quote Post
DREEMus
post
Post #7





Grupa: Zarejestrowani
Postów: 286
Pomógł: 34
Dołączył: 4.09.2008
Skąd: Wrocław

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


Faktycznie ;D hmm, nie zwróciłem uwagi na to :/
ale wcześniej próbowałem z "AND" to wywalało mi błąd ...
żeby nie było, że nie szukałem (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) MySQL - Operatory i funkcje

Doszedłem do IF'a w MySQL (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) zasada jak w Excelu (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Zaraz naskrobie poprawnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

"Spłodziłem" coś takiego (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
  1. SELECT IF ('127.0.0.1' = '127.0.0.1', COUNT(id) AS 'ile', INSERT INTO `licznik` (`id`, `adres`, `host`) VALUES (NULL, '128.0.0.1', 'localhost) ) FROM `dreemus`.`licznik`

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS 'ile', INSERT INTO `licznik` (`id`, `adres`, `host`) VALUES (NULL, ... at line 1

I generalnie nie wiem jak to poskładać ... :/

Poddaje się ... próbowałem z CASE ... chyba PHP łatwiejsze niż MySQL (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Nigdzie nie mogę znaleźć jak wstawić polecenie w jakiś warunek ... np. jeżeli tak albo nie ... zawsze błąd :/
np. IF ('123' = '123', 'tak', 'nie') i tyle w manualu (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Więc póki co zostaje przy "wersji 2" (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował DREEMus 1.04.2009, 17:46:46
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 4.10.2025 - 16:12