通过来自子查询的GROUP_CONCAT的REGEX值集

时间:2014-04-12 20:42:45

标签: mysql phpmyadmin group-concat

我有这个可怕的疑问,

REMOVED

现在,当用户只喜欢一个乐队时,这种方式非常好,但是当用户喜欢2个或更多乐队时,由于子查询返回多个结果,这不会起作用,但是我试着GROUP_CONCAT我最终得到了WHERE子句如下

REMOVED

,这会导致错误#1111 - Invalid use of group function

如果有人能够帮助我这样做,因为我真的不想将负载放到Apache服务器上将结果拉入php以获取值并激活查询的负载也可能最终导致数百个或者可能有数千个查询页面的一个部分

更新2: WooHoo有点......

SELECT 
    B.*,
    (SELECT COUNT(*) FROM `blog_likes` AS BL WHERE BL.`blog_id` = B.`blog_id` ) AS likes
FROM blog AS B
WHERE `tags` REGEXP (
    SELECT GOUP_CONCAT(ConcatBandNames, '|') 
    FROM (
        SELECT CONCAT(
            CONCAT(
                '%',
                (
                    SELECT 
                        `band_name` 
                    FROM `band` AS BA 
                    WHERE BA.`band_id` = 
                    ( 
                        SELECT `band_id` 
                        FROM `likes` AS L 
                        WHERE `user_id` = '7' 
                        AND `band_id` = BA.`band_id` 
                    )
                )
            )
            , '%'
        ) AS ConcatBandNames
    ) AS T
)

在语法方面工作但现在说错误#2014 - Commands out of sync; you can't run this command now

1 个答案:

答案 0 :(得分:0)

这应该是GROUP_CONCAT(CONCAT('.*',CONCAT(band_name, '.*')) SEPARATOR '|'),所以我的查询现在看起来像

SELECT 
    B.*,
    (SELECT COUNT(*) FROM `blog_likes` AS BL WHERE BL.`blog_id` = B.`blog_id` ) AS likes
FROM blog AS B
WHERE `tags` REGEXP (
    SELECT 
    GROUP_CONCAT(CONCAT('.*',CONCAT(`band_name`, '.*')) SEPARATOR '|') 
    FROM `band` AS BA 
    WHERE BA.`band_id` = 
    ( 
        SELECT `band_id` 
        FROM `likes` AS L 
        WHERE `user_id` = '7' 
        AND `band_id` = BA.`band_id` 
    )
)