2013-01-22 63 views
0

我不知道如何做到這一點。從MYSQL SELECT到MYSQL VIEW


背景:

概況 - >與用戶表型材

得分 - >與用戶的評分表(一個用戶可以有多個得分)(此表有created_at領域,知道什麼時候我介紹新的分數)

想象一下,得分表保存klout得分數據。


如何將此查詢轉換爲視圖?

SELECT t1.id, 
    t1.name, 
    t1.screen_name, 
    t1.description, 
    t1.url, 
    t1.statuses_count, 
    t1.followers_count, 
    t1.friends_count, 
    t1.listed_count, 
    t1.favourites_count, 
    t1.utc_offset, 
    t1.time_zone, 
    t1.verified, 
    t1.lang, 
    t1.profile_image_url, 
    t1.geo_enabled, 
    t1.location, 
    t1.lat, 
    t1.lng, 
    t1.created_at, 
    t3.score, 
    t3.delta, 
    t3.detail 
     FROM profiles t1 LEFT JOIN (SELECT t2.user_id, t2.score, t2.delta, t2.detail 
                FROM scores t2 
                ORDER BY t2.created_at DESC) 
       AS t3 ON t3.user_id = t1.id 
     GROUP BY t1.id 

回答

4

問題VIEW不能包含subquery,查詢中的子查詢可以直接在表連接,因爲你還沒有進行任何的聚集。

CREATE VIEW viewName 
AS 
SELECT t1.id, 
     t1.name, 
     t1.screen_name, 
     t1.description, 
     t1.url, 
     t1.statuses_count, 
     t1.followers_count, 
     t1.friends_count, 
     t1.listed_count, 
     t1.favourites_count, 
     t1.utc_offset, 
     t1.time_zone, 
     t1.verified, 
     t1.lang, 
     t1.profile_image_url, 
     t1.geo_enabled, 
     t1.location, 
     t1.lat, 
     t1.lng, 
     t1.created_at, 
     t3.score, 
     t3.delta, 
     t3.detail 
FROM profiles t1 
     LEFT JOIN scores t3 
      ON t3.user_id = t1.id 
-- GROUP BY t1.id 

我不明白爲什麼你在查詢中有一個GROUP BY子句。

+0

背景: 用戶配置文件 - >表與用戶配置文件 得分 - >與用戶的得分表(一個用戶可以有多個得分)(此表有一個created_at領域,知道什麼時候我介紹新的得分) 想象一下,得分表保存klout得分數據。 –

+1

我也沒有得到這個組。通常只有在聚合時才考慮分組。對於例如:a.name,a.id,sum(a.amt_paid)從一個表組a.name,a.id = summed amt支付每個唯一的名稱和ID組合....沒有理由上面使用group by或者left join中的select,它只是讓你的查詢永遠計算,而你的查詢默認按照ID進行分組,因爲它是查詢中的第一個元素 – Hituptony

0

您可以將代碼分成2次

視圖1:

CREATE VIEW step1 

AS 

SELECT t2.user_id, t2.score, t2.delta, t2.detail 
FROM scores t2 
ORDER BY t2.created_at DESC 

查看2:

CREATE VIEW step2 

AS 

SELECT t1.id, 
       t1.name, 
       t1.screen_name, 
       t1.description, 
       t1.url, 
       t1.statuses_count, 
       t1.followers_count, 
       t1.friends_count, 
       t1.listed_count, 
       t1.favourites_count, 
       t1.utc_offset, 
       t1.time_zone, 
       t1.verified, 
       t1.lang, 
       t1.profile_image_url, 
       t1.geo_enabled, 
       t1.location, 
       t1.lat, 
       t1.lng, 
       t1.created_at, 
       t3.score, 
       t3.delta, 
       t3.detail 
FROM profiles t1 
    LEFT JOIN step1 AS t3 ON t3.user_id = t1.id 
GROUP BY t1.id 

我不知道你爲什麼被t1.id分組,但也許你的數據中有些東西我不知道