Подреждане на резултати по дни

alex95_bg_2

Registered
Мъча се над едно нещо от доста време и вече се предадох :lol:
Имам база данни с таблица visits. в нея имам поле date което е unix timestamp на времето на посещението
Трябва да изкарам резултатите в таблица, с странициране и подредени най-новите отпред. С подчертаните неща н можах да се справя
Ето кода до който стигнах, който ги показва но в обратен ред и без странициране

Код:
$razl = time() - $details['time'];
$dni = round($razl/60/60/24);

$end = @mktime(0, 0, 0, date("m"), date("d")+1, date("Y")); 
$start = @strtotime("-$dni days",$end);

for($i=1;$i<$dni;$i++) {
$time = @strtotime("+1 day",$start);

$query = mysql_query("SELECT DISTINCT(ip) FROM visits WHERE id_site='$id_site' AND date>$start AND date<$time");
$num = mysql_numrows($query);

$data[] = $num;

$xlabels[] = @date("j M",$start);

$start = @strtotime("+1 day",$start);

}

foreach($data as $k=>$v) {
echo $v." - ". $xlabels[$k]."<br />";
}
 
Ако са в обратен ред направи така :
Код:
$data = array_reverse($data);
foreach($data as $k=>$v) { 
echo $v." - ". $xlabels[$k]."<br />";
А страницирането би трябвало да е стандартно ( има го из уроците по сайта )
 
Значи, не съм се заглеждал по сметките ти с времето защото не си казал какъв период искаш да обхванеш, затова приемаме че е всичко точно там. За страницирането и подреждането най- елегантно и бързо е да го постигнеш с mysql имам предвид следното:
1. решаваш колко резултата искаш на страница (напр.10);
2. проверяваш колко общо резултата ще излязат:
Код:
SELECT count(DISTINCT ip) FROM `visits`
3. Разделяш резултата на брой на страница: напр. 67/10 = 6,7; тъй като не можеш да имаш 6,7 страници закръгляш нагоре т.е. 7(това всичко ти трябва за да направиш линкове за страниците);
4. Правиш SQL заявка която да ти изкарва максимум 10 резултата:
Код:
SELECT DISTINCT(ip) FROM visits WHERE id_site='$id_site' AND date>$start AND date<$time ORDER BY ip DESC LIMIT $currentRow, 10
където $currentRow е (страница-1)*бр.резултати;
5. Правиш линкове от рода на
Код:
/ips.php?page=1
където важната част е page или както там решиш да си кръстиш страниците, при кликване на такъв линк:
Код:
isset($_GET['page'])?$page = $_GET['page']:$page=1;
$currentRow = ($page-1)*10;
$sql = SELECT DISTINCT(ip) FROM visits WHERE id_site='$id_site' AND date>$start AND date<$time ORDER BY ip DESC LIMIT $currentRow, 10;
$query = mysql_query($sql);
и нататъка ти си решаваш какво да правиш с резултата
 
направих го сам вчера, просто много ми се спеше и не ми беше дошла идеята тогава :)
проблема е че не мога директно по дни да изкарам от mysql резултатите за това бяха в цикъл
Страницирането го направих простично, само Напред и Назад докъдето стигнат :lol:
мисля да дам точка на Rado защото точно с array_reverse всичко си стана :)

мерси за доброто обяснение на страницирането :)
 

Горе