Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Dodatkowe wirtualne kolumny
Forum PHP.pl > Forum > Przedszkole
The Night Shadow
  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ć)...
em1X
  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
The Night Shadow
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ć?
em1X
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. ?>
The Night Shadow
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 :- )
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.