Текущий архив: 2003.11.17;
Скачать: CL | DM;
ВнизПомогите, SQL, php Нужен совет! дело такое. Найти похожие ветки
← →
Style (2003-10-20 14:49) [0]Делаю рейтинги сайтов
http://hch.ru/topcites/index.php
в общем в MySQL создал 3 таблицы
1-я top_cites
CiteID (double), CiteName (varchar), CiteUrl (varchar), DateReg (int 11), Name (varchar), Password (varchar), CatID - категория сайта, ImageID - баннер ...
2-я top_ips
CiteID (double), IP (varchar), LastHit (int 11) -- Unixtime последнего клика для IP
3-я top_hist
CiteID, Date (int 11) -- Unixtime текущая дата , Hits (double) - кол-во хитов, Hosts (double) -- кол-во хостов
В общем в таблицу top_cites записываются сами сайты
top_ips - записываются уникальные IP для определенного CiteID
в top_hist записываются кол-во хитов и хостов для СiteID на текущую дату.
Пытаюсь вывести отчет
select t.CiteID, t.CiteURl, t.DateReg, t.CiteName, IfNULL( h.Hosts, 0 ), IfNULL( h.Hits, 0 ) from
top_cites as t
LEFT JOIN top_hist as h ON (h.citeid = t.citeid)
WHERE Date_format( FROM_UNIXTIME( h.Date ) , "%Y-%m-%d" ) = Date_format( Now( ) , "%Y-%m-%d" ) ORDER BY h.HOSTS DESC , h.Hits DESC , t.CiteName;
Селект проходит удачно получаю список сайтов
Но если Кол-во в top_hist нет записи на текущую дату, то такие
сайты не отображаются вместо CiteName, 0, 0
Попробывал по другому
select t.CiteID, t.CiteURl, t.DateReg, t.CiteName, IfNULL( h.Hosts, 0 ), IfNULL( h.Hits, 0 ) from
top_cites as t
LEFT JOIN top_hist as h ON (h.citeid = t.citeid)
WHERE Date_format( FROM_UNIXTIME( h.Date ) , "%Y-%m-%d" ) = Date_format( Now( ) , "%Y-%m-%d" ) OR h.Date IS NULL ORDER BY h.HOSTS DESC , h.Hits DESC , t.CiteName;
Тоже самое :(
Хотел использовать UNION
( select t.CiteID, t.CiteURl, t.DateReg, t.CiteName, IfNULL( h.Hosts, 0 ), IfNULL( h.Hits, 0 ) from
top_cites as t
LEFT JOIN top_hist as h ON (h.citeid = t.citeid)
WHERE Date_format( FROM_UNIXTIME( h.Date ) , "%Y-%m-%d" )
= Date_format( Now( ) , "%Y-%m-%d" ) )
UNION
(
select t.CiteID, t.CiteURl, t.DateReg, t.CiteName, Hosts = 0, Hits = 0 from
top_cites as t
LEFT JOIN top_hist as h ON (h.citeid <> t.citeid)
WHERE Date_format( FROM_UNIXTIME( h.Date ) , "%Y-%m-%d" )
= Date_format( Now( ) , "%Y-%m-%d" ) )
)
ORDER BY h.HOSTS DESC , h.Hits DESC , t.CiteName
Так вот у хостера на столько старый MySQL что даже UNION не поддерживает - короче 3.21
NOT EXIST не поддерживает
Вложеные селекты тоже :(
Помогите, дайте совет!
1) Сменить провайдера
2) Замучить infobox.ru чтобы они сменили мускул
3) В PHP по очереди выполнить 2 селекта и самостоятельно
выполнить UNION двух массивов с данными
Самому написать LIMIT, и сортировку QuickSort для того чтобы сортировать объединеные массивы.
4) В момент UPDATEа top_hist проверять существование записи и в случае если такой нет. добавлять строчку CiteID, Дата, 0, 0
5) другой вариант.???
← →
Style (2003-10-20 15:23) [1]Не ну чего ни хто не поможеть???
← →
Style (2003-10-20 16:14) [2]Не ну хоть напишите что-нибудь :)
← →
Style (2003-10-21 10:27) [3]оххх :(
*достает носовой платок :(
← →
isko (2003-10-21 10:33) [4]кто то сказал - он делает! делает! а не просит...
← →
Style (2003-10-21 10:34) [5]2 isko - дык посоветоваться, то можно???
← →
isko (2003-10-21 10:37) [6]Style © -
я так пишу потому что не могу посоветовать)
← →
Style (2003-10-21 10:41) [7]Да тут без пива так быстро не разобраться ;)
А еще надо делать историю рейтингов, за месяц, за год, за неделю.
Коеффициент + или - хостов за определенный период..
Вот и думай чего делать.?
На PHP то все не свалишь? Хотелось бы более способный SQL.
← →
Style (2003-10-21 11:57) [8]Так чего пиво не кому не надо штоль???
← →
Style (2003-10-24 17:33) [9]Уууу???
С рыбкой пиво то! ;P
Страницы: 1 вся ветка
Текущий архив: 2003.11.17;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.011 c