2014-05-06 63 views
0

我正在構建一個執行獲取用戶獎品數據的查詢。我試圖通過group_concat函數在一列中獲取所有獎品數據。將父查詢列值傳遞到子查詢中

我已經差不多完成了查詢,但我無法做的一件事是將父查詢用戶標識值傳遞給子查詢以相應地獲取數據。

+----+---------------+------------+------------------------------+ 
|id |user_email  |user_name | prizes      | 
+----+---------------+------------+------------------------------+ 
|1 |user_email  |user_name | user1 prizes     | 
|2 |user_email  |user_name | user2 prizes     | 
|3 |user_email  |user_name | user3 prizes     | 
|4 |user_email  |user_name | user4 prizes     | 
|5 |user_email  |user_name | user5 prizes     | 
|6 |user_email  |user_name | user6 prizes     | 
|7 |user_email  |user_name | user7 prizes     | 
|8 |user_email  |user_name | user8 prizes     | 
+----+---------------+------------+------------------------------+ 

下面是代碼:

SELECT u.ID,u.user_email,u.user_name, 
(SELECT GROUP_CONCAT(concatval ORDER BY id DESC SEPARATOR '|~prize~|~sprt~|') 

FROM (

SELECT s.user_id,s.id, CONCAT_WS('|~value~|~sprt~|', s.id,s.offer, IFNULL(p.post_title,'N/A'), s.time, IFNULL(s.expiry_date,'N/A'), IFNULL(m.meta_value,'N/A'), IFNULL(a.meta_value,'N/A'),s.coupon) as concatval 
FROM s_data s 
LEFT JOIN sc_posts p ON s.campaign_id = p.ID 
LEFT JOIN sc_postmeta m ON s.campaign_id = m.post_id AND m.meta_key = 'phone' 
LEFT JOIN sc_postmeta a ON s.campaign_id = a.post_id AND a.meta_key = 'address' 
WHERE s.user_id = 2 AND s.status = 'awarded' AND (STR_TO_DATE(s.expiry_date,'%M %d,%Y') > DATE(NOW()) OR s.expiry_date IS NULL OR s.expiry_date = '') 
ORDER BY s.id DESC LIMIT 0,7 

    ) tmptable 
GROUP BY user_id 

) as prizes 

FROM sc_users u 

GROUP BY u.ID 

我需要在那裏說(WHERE s.user_id = 2)相應地取數據通過第一線的u.id到線11。我試圖用這個,但是它在'where子句'中說'未知列'u.ID'「。有人能幫助我嗎。提前致謝。

+0

沒有它不可能你的內部查詢首先執行,然後上面查詢將獲得與選擇,你的數據現在擁有它。 –

回答

0

YPU可以在添加子查詢部分,並與用戶加入 喜歡這個

SELECT u.ID,u.user_email,u.user_name, 
prizes.concatval 

FROM sc_users u 
    JOIN (SELECT GROUP_CONCAT(concatval ORDER BY id DESC SEPARATOR '|~prize~|~sprt~|') 

FROM (

SELECT s.user_id,s.id, CONCAT_WS('|~value~|~sprt~|', s.id,s.offer, IFNULL(p.post_title,'N/A'), s.time, IFNULL(s.expiry_date,'N/A'), IFNULL(m.meta_value,'N/A'), IFNULL(a.meta_value,'N/A'),s.coupon) as concatval 
FROM s_data s 
LEFT JOIN sc_posts p ON s.campaign_id = p.ID 
LEFT JOIN sc_postmeta m ON s.campaign_id = m.post_id AND m.meta_key = 'phone' 
LEFT JOIN sc_postmeta a ON s.campaign_id = a.post_id AND a.meta_key = 'address' 
WHERE s.user_id = 2 AND s.status = 'awarded' AND (STR_TO_DATE(s.expiry_date,'%M %d,%Y') > DATE(NOW()) OR s.expiry_date IS NULL OR s.expiry_date = '') 
ORDER BY s.id DESC LIMIT 0,7 

    ) tmptable 
GROUP BY user_id 

) prizes on.prizes.user_id=u.ID 

GROUP BY u.ID