Топ файлове за седмицата?

На теория: като отчиташ всеки файл колко пъти е свален , а в "ТОП най-сваляните файлове" вадиш да речем 10 и ги сортираш по сваляния

На практика: към таблицата която съхранява файловете добавяш поле

"downloads" - примерно , което да е int или big int и по default да е "0" нула

Какво печелиш с това ? Като добавяш нов файл ще е с 0 сваляния по default ...

А във всяка страница за даден файл вече ще имаш ъпдейт заявка когато е свален файла , която ще ъпдейтва това поле и ще сетва текущите downloads + 1
т.е. ако един файл е свален 5 пъти , ти като го свалиш да се изпълнява тази заявка и хоп вече е 6 пъти свален .

Това е основата , драсни малко код и пейстни да ти кажем евентуално какви проверки трябва да добавяш ако не се сещаш
 
Това, което си написал вече е направено. Мен ме интересува примерно да сметне най-сваляните за седмицата и да ги подрежда и всяка седмица това да се обновява. :lol:
 
Ако (в нова таблица) записваш дата на изтегляне и id на изтегленото? Или има по-добър начин?
 
joTunkiq каза:
[sql]Select * FROM `tablicata_ti` ORDER BY `downloads` DESC LIMIT 20[/sql] :?:
В момента е така, а аз искам примерно да изчисли изтегленията за всяка седмица и да ги подрежда така. Примерно:
Тази седмица
Песен 1 - 15 пъти
Песен 2 - 10 пъти
Песен 3 - 5 пъти
За другата седмица
Песен 3 - 15 пъти
Песен 1 - 10 пъти
Песен 2 - 5 пъти
И това да се ъпдейтва всяка седмица. :twisted:
 
Еми за това, както каза колегата, трябва още една таблица, в която да записваш ид и тиместамп на изтегления файл (при всяко изтегляне) и да взимаш инфото от 2-те таблици, като от тази с тегленията взимаш само броя тегления и от таблицата с файловете взимаш заглавието(гледам по изчерпателния пример, който си дал) и ще стане.

Примерна заявка:
[sql]Select * FROM `music` LEFT JOIN `music-downloads` on `music`.`id`= `music-downloads`.`song_id` ORDER BY `music-downloads`.`downloads` DESC LIMIT 20[/sql]

Нещо такова, като ти трябва да си направиш таблица(за която ти казах) и да се водиш по заявката, а да и да добавиш WHERE клауза за да ти ги изкава за тази или миналта седмица, като трябва да се съобразиш и с това дали ще ползваш date или timestamp ;) :?:
 
примерна заявка за топ 20 през тази седмица:

[sql]SELECT m.*, COUNT(md.music_id) AS cnt
FROM music m
LEFT JOIN music_downloads md ON m.id = md.music_id
WHERE YEARWEEK(md.created_at, 1) = YEARWEEK(CURDATE(), 1)
ORDER BY cnt DESC
GROUP BY m.id[/sql]

идея си нямам дали ще работи)
 
Как ще стане заявката за всяка седмица, че аз не можах да се оправя...
Моята заявка:
[sql]"SELECT * FROM `music` ORDER BY `download` DESC LIMIT 10"[/sql]
 
Silverlight каза:
Как ще стане заявката за всяка седмица, че аз не можах да се оправя...
Моята заявка:
[sql]"SELECT * FROM `music` ORDER BY `download` DESC LIMIT 10"[/sql]
djman ти го е дал съвсем точно (или поне изглежда доста правдоподобно), не виждам къде не работи.
(@stoqnski трябва да е yearweek понеже week ще даде един и същ резултат и за 5.10.1015, и за 5.10.2014)

Освен някоя невидима sytax грешка...
djman каза:
примерна заявка за топ 20 през тази седмица:

[sql]SELECT m.*, COUNT(md.music_id) AS cnt
FROM music m
LEFT JOIN music_downloads md ON m.id = md.music_id
WHERE YEARWEEK(md.created_at, 1) = YEARWEEK(CURDATE(), 1)
ORDER BY cnt DESC
GROUP BY m.id[/sql]

идея си нямам дали ще работи)
 
Един малък съвет, когато работите с пейджинг: ползвайте съответните инструменти за това. При mysql имаме следната цепия:

[sql]SELECT SQL_CALC_FOUND_ROWS * FROM `blabla` WHERE id > 100 LIMIT 20,10;[/sql]

Та... ключовата дума (забележете ключова дума, а не функция) SQL_CALC_FOUND_ROWS ще калкулира колко са всички резултати, филтрирани по условията във WHERE, но без да взима внимание указания лимит и ще запише стойноста във вътрешна променлива. Взимането на въпросната променлива става със заявката

[sql]SELECT FOUND_ROWS();[/sql]

която не отнема никакво време и ресурси, понеже просто връща една стойност от паметта, където нещата се случват много бързо (практически скороста на тази заявка не може да бъде калкулирана). С този метод можете да си автоматизирате заявките с пейджинг. Визуализацията - всичко опира до основи на математиката от трети клас... май тогава се учеха сложните операции имножение и деление на прости числа :)
 
Размени местата на група и ордера... а предния ми пост се е отнасял до друга тема (за пейджинг беше нещо :) )
 

Back
Горе