Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Dodatkowe wirtualne kolumny
The Night Shadow
post
Post #1





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


  1. <?php
  2. $pobieranie_najaktywniejszych_uzytkownikow = mysql_query("SELECT l.id, l.login, l.data, count(d.id) as ilosc FROM $tabela_datylogowan d, $tabela_logowanie l WHERE l.id = d.da
    tylogowan_id_uzytkownika GROUP BY l.id ORDER by ilosc DESC LIMIT 10"
    );
  3. ?>


Mając powyższe zapytanie pobieram listę użytkowników sortując ich w odwrotnej kolejności według ilości odwiedzin. Wszystko działa poprawnie. (Zmienne na pewno przyjmują odpowiednie wartości)

Tabele:

datylogowan
id
id_uzytkownika
data
logowanie
id
login
data

Czy istnieje możliwość takiego napisania tego zapytania, aby tworzyła się dodatkowa kolumna (wirtualna - nieistniejaca w bazie), w której widoczna byłaby ilośc wizyt każdego z tych użytkowników na dzień...?

Obliczenie powinno wyglądać tak:

  1. <?php
  2. (ceil(((ilosc/(ceil((time()-(l.data))/60/60/24)))*100))/100
  3. ?>


Gdzie ilosc pochodzi z zapytania: count(d.id) as ilosc, a data jest kolumną już istniejącą w tabeli.

Kiedy zrobić to dla każdego użytkownika po wykonaniu zapytania bez obliczeń wygląda to tak:

  1. <?php
  2. while ($dane_najaktywniejszych_uzytkownikow = mysql_fetch_assoc($pobieranie_najaktywniejszych_uzytkownikow))
  3. { 
  4. $ilosc_wizyt_dziennie = (ceil(($dane_najaktywniejszych_uzytkownikow['ilosc']/(ceil((time()-$dane_najaktywniejszych_uzytkownikow['data'])/60/60/24)))*100))/100;
  5. }
  6. ?>


Porblem polega jednak na tym, że w takim przypadku nie istnieje możliwość posortowania listy według częstotliwości odwiedzin, a jedynie według ich ilości, co może być zakłamaniem. Jeden użytkownik mógłby zarejestrować się rok temu i mieć 366 wizyt inny 2 dni temu i mieć wizyt 15, czyli odwiedzać stronę znacznie częściej.

Czy da się to jakoś rozwiązać? W skrócie chodzi o pobieranie danych z bazy danych MySQL wraz z dodatkowymi kolumnami, w których znajdowałyby się jakieś modyfikacje tych danych (tak by można było według nich sortować)...

Ten post edytował The Night Shadow 11.06.2006, 11:49:33
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
em1X
post
Post #2





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


  1. <?php
  2. mysql_query("SELECT l.id, l.login, l.data, count(d.id) as ilosc, (CEIL(((ilosc/(CEIL((UNIX_TIMESTAMP()-(l.data))/60/60/24)))*100))/100) as czestosc FROM $tabela_datylogowan d, $tabela_logowanie l WHERE l.id = d
    .datylogowan_id_uzytkownika GROUP BY l.id ORDER by czestosc DESC LIMIT 10"
    );
  3. ?>


pisane z palca.. ale: jasne, ze mozna

Ten post edytował em1X 11.06.2006, 11:59:38
Go to the top of the page
+Quote Post
The Night Shadow
post
Post #3





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


Normalnie wszystko działa. Po dodaniu tego:

  1. <?php
  2. , ((CEIL(((ilosc/(CEIL(UNIX_TIMESTAMP()-(l.data))/60/60/24)))*100))/100) as czestosc
  3. ?>


Za:

  1. <?php
  2. count(d.id) as ilosc
  3. ?>


I zmianie sortowania na: ORDER by czestosc DESC pojawia się błąd:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL

Błąd dotyczy tej linii:

  1. <?php
  2. while ($dane_najaktywniejszych_uzytkownikow = mysql_fetch_assoc($pobieranie_najaktywniejszych_uzytkownikow))
  3. ?>



Zauważyłem, że skrypt nie widzi ilosc Kiedy zamienić ją na nazwę jakiejkolwiek kolumny zawierające liczby wszystko działa... da się to jakoś rozwiązać?

Ten post edytował The Night Shadow 11.06.2006, 12:15:30
Go to the top of the page
+Quote Post
em1X
post
Post #4





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


nie dziwne skoro raz: twoja formuła miała chyba o jeden nawias za duzo, dwa: usunales kolumne ktora jest wykorzystywana w równaniu

  1. <?php
  2. mysql_query("SELECT l.id, l.login, l.data, (CEIL(((count(d.id)/(CEIL((UNIX_TIMESTAMP()-(l.data))/60/60/24)))*100))/100) as czestosc FROM $tabela_datylogowan d, $tabela_logowanie l WHERE l.id = d
    .datylogowan_id_uzytkownika GROUP BY l.id ORDER by czestosc DESC LIMIT 10"
    );
  3. ?>
Go to the top of the page
+Quote Post
The Night Shadow
post
Post #5





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


Nie usuwałem tej kolumny... Po prostu wynikałoby z tego, że powinno być tak:

count(d.id) as ilosc, (CEIL(((count(d.id)/(CEIL((UNIX_TIMESTAMP()-(l.data))/60/60/24)))*100))/100) as czestosc

B teraz jeśli w działaniu obliczającym częstotliwość zamienię count(d.id) na ilosc pojawia się ten błąd...

Dzięki za pomoc :- )
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: 22.12.2025 - 23:56