У меня есть две таблицы afrostarprofiles и afrostarvvideos, созданные, как показано ниже. Поле artistid в afrostarvideos является основным идентификатором afrostarprofiles. Я хочу один запрос, который вернет мне самый популярный afrostarprofile на основе суммы просмотров (afrostarvideo) и просмотров afrostarprofiles. Мне в основном нужен алгоритм или запрос, который будет оценивать afrostarprofiles на основе общих просмотров видео из afrostarvideos и просмотров из afrostarprofiles. Это возможно. Я знаю, что могу сделать это с помощью PHP-обработки sql-результатов, но я думаю, что есть более эффективный способ с mysql. любая помощь приветствуется
$ct_members="CREATE TABLE `afrostarprofiles` (". "`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,". "`name` TEXT NOT NULL ,". "`country` TEXT NOT NULL ,". "`piclocation` TEXT NOT NULL ,". "`views` INT NOT NULL ,". "`date` INT NOT NULL );"; mysql_query($ct_members); $ct_members="CREATE TABLE `afrostarvideos` (". "`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,". "`name` TEXT NOT NULL ,". "`url` TEXT NOT NULL ,". "`views` INT NOT NULL ,". "`artistid` INT NOT NULL ,". "`date` INT NOT NULL );"; mysql_query($ct_members);
пример таблицы структуры afrostarprofiles
4 Jose Chameleon Uganda afrostarpics/4.jpg 10 1287082754 3 Ziggy Dee Uganda afrostarpics/3.jpg 44 1286494407
примеры профиля afrostarvideo
12 Tebamatila www 11 3 1287136275 13 Mamba Mtu www 14 3 1287136524 14 TECHNOLOGY www 15 4 1287170779 125 Jamila www 14 4 1287387760
Я думаю, вам нужно что-то вроде
SELECT `p`.*, SUM(`v`.`views`)+`p`.`views` AS `totalViews` FROM `afrostarprofiles` `p` LEFT OUTER JOIN `afrostarvideos` `v` ON `p`.`id` = `v`.`artistid` GROUP BY `p`.`id` ORDER BY SUM(`v`.`views`)+`p`.`views` DESC
Использование:
SELECT t.* FROM AFROSTARPROFILES t JOIN (SELECT p.id, SUM(p.views) + COALESCE(SUM(v.views), 0) AS total_views FROM AFROSTARPROFILES p LEFT JOIN AFROSTARVIDEOS v ON v.artistid = p.id GROUP BY p.id) x ON x.id = t.id ORDER BY x.total_views DESC