2014-04-12 51 views
0

爲什麼不這項工作:mysql的通價值爲子查詢與條款

SELECT * 
FROM `group` AS G, 
     (SELECT sum(`count`) 
     FROM `counter` 
     WHERE `id` IN (G.`ids`)) t 
WHERE G.id = '1' 
LIMIT 1; 

我路過group.ids值的子查詢IN條款的問題。

group.ids字段的值是:

70,194,458,459,570,470 

這可能嗎?

我得到這個錯誤:

Unknown column 'G.ids' in 'where clause'

+0

'group.ids'在每一行中都有逗號分隔的數值嗎? –

+0

是的值是70,194,458,459,570,470 –

+0

你需要計數器表中的'sum(count)'嗎? –

回答

0

這裏是將解決你的問題,在這裏基本上你是選擇和group所有字段counter只是countFIND_IN_SET()將匹配c.id任何值的查詢在逗號分隔的字符串中。

SELECT G.*, (SELECT sum(`count`) 
     FROM `counter` c 
     WHERE FIND_IN_SET(c.`id`, G.`ids`)) 
    FROM `group` G   
    WHERE G.id = 1 
    LIMIT 1 

Here是一些額外的信息關於FIND_IN_SET,你應該知道。

+0

工作完美,謝謝。 FIND_IN_SET是解決方案嗎?我從來沒有使用過這個功能。我猜是不是隻用'IN'就可以做到? –

+0

@BeavisIsCool它可以是,但首先你必須編寫一個函數,它將採取字符串,使用逗號和每行返回值標記,所以這是一種遠射,加上鍊接的問題說'FIND_IN_SET'不是爲索引進行了優化,所以要記住 –

+0

@BeavisIsCool順便說一下,你的問題也幫助了我,謝謝你發佈了一個好問題;)乾杯 –