2010-10-24 40 views
1

我有兩個表afro​​starprofiles和afrostarv視頻創建如下所示。 afrostar視頻中的artistid字段是afrostarprofiles的主要ID。我想要一個基於總和視圖(afrostarvideo)和afrostarprofiles視圖返回給我的最受歡迎的afrostarprofile的單個查詢。我基本上需要一個算法或查詢,它將根據來自afrostar視頻的視頻和afrostarprofiles的視圖的總視圖來排列afrostarprofiles。這可能嗎。我知道我可以用php處理sql結果,但我認爲用mysql更有效。任何幫助表示讚賞例如afrostarprofiles的表結構的PHP 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); 

afrostarvideo輪廓

4 Jose Chameleon Uganda afrostarpics/4.jpg 10 1287082754 
3 Ziggy Dee Uganda afrostarpics/3.jpg 44 1286494407 

例子

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 

回答

1

我認爲你需要像

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 
+0

即時通訊設法爲videocount添加最後一個字段。 SQL我認爲四videocount = $ q =「SELECT COUNT(*)FROM afrostarvideos WHERE artistid = X」; – 2010-10-25 02:18:00

+0

該查詢需要很長時間才能執行。請在下面閱讀我的答案......任何原因爲什麼 – 2010-12-27 03:37:23

1

用途:

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