为什么我的MySQL查询不能在PHP中工作,我得到了一个错误?

为什么我的MySQL查询不能在PHP中工作,我得到了一个错误?,php,mysql,Php,Mysql,我刚刚在Stackoverflow上得到了一些帮助,并得到了正确的查询。 但是他不懂PHP,所以现在我也需要帮助 以下是查询和PHP: if($do_resync) { $sql = " with MY_VIEW as ( SELECT room_user.*, user.username AS user_name, user.group_id AS group_id,

我刚刚在Stackoverflow上得到了一些帮助,并得到了正确的查询。 但是他不懂PHP,所以现在我也需要帮助

以下是查询和PHP:

if($do_resync) {
    $sql = "
        with MY_VIEW as
        (
        SELECT
            room_user.*,
            user.username AS user_name,
            user.group_id AS group_id, USER.USER_ID
        FROM {$x7->dbprefix}room_users room_user
        INNER JOIN {$x7->dbprefix}users user ON
            user.id = room_user.user_id
        WHERE
            room_id IN ({$rooms})
        )
        SELECT COUNT(id) AS block FROM
            blocks AS B, MY_VIEW AS M
        WHERE
            B.user_id = M.user_id
        AND B.blocked_id = B.user_id
    ";
    $st = $db->prepare($sql);
    $st->execute(); (THIS IS LINE 230 that the error points at)
    $users = $st->fetchAll();
    $output['users'] = $users;
}

echo json_encode($output);
下面是我得到的错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MY_VIEW as ( SELECT room_user.*, user.username AS user_name, u' at line 6' in pages/sync.php:230 Stack trace: #0 pages/sync.php(230): PDOStatement->execute() #1 index.php(50): require('/home/vol5_3/by...') #2 {main} thrown in pages/sync.php on line 230
编辑:

Mysql不支持子句“无论您如何执行以下操作,请从查询中加入数据集”

SELECT * FROM 
        (
        SELECT
            room_user.*,
            user.username AS user_name,
            user.group_id AS group_id, USER.USER_ID
        FROM {$x7->dbprefix}room_users room_user
        INNER JOIN {$x7->dbprefix}users user ON
            user.id = room_user.user_id
        WHERE
            room_id IN ({$rooms})
        ) AS M
JOIN (SELECT * FROM blocks ) AS B
ON (B.user_id = M.user_id)
WHERE B.blocked_id = B.user_id
编辑

SELECT * FROM 
            (
            SELECT
                room_user.*,
                user.username AS user_name,
                user.group_id AS group_id, USER.USER_ID
            FROM {$x7->dbprefix}room_users room_user
            INNER JOIN {$x7->dbprefix}users user ON
                user.id = room_user.user_id
            WHERE
                room_id IN ({$rooms})
            ) AS M
    JOIN blocks  B
    ON (B.user_id = M.user_id)
    WHERE B.blocked_id = B.user_id
或者将您的条件移动到零件上的何处

    JOIN blocks  B
    ON (B.user_id = M.user_id AND B.blocked_id = B.user_id)

我可以想出两种方法来解决你的问题:

1创建一个视图:

    $sql="CREATE VIEW MY_VIEW as
    SELECT
        room_user.*,
        user.username AS user_name,
        user.group_id AS group_id, USER.USER_ID
    FROM {$x7->dbprefix}room_users room_user
    INNER JOIN {$x7->dbprefix}users user ON
        user.id = room_user.user_id
    WHERE
        room_id IN ({$rooms})";
然后做你的选择

2创建临时表:()


这不是一个完全重复的问题,但您要查找的信息似乎在这里的答案中:我对SQL不太了解,但我的视图(…)SELECT…是否有效语法?那该怎么办?好吧,它不支持。如何在使用PHP的查询中实现所需的功能?正如消息所说,您有一个语法错误
echo
准备
并发布结果之前,请先查看
$sql
变量。谢谢!我要试试这个,嗯;)现在我的主机坏了。。。我会让你们知道事情的进展!我现在测试了它,发现SQL错误。。。这就是我得到的(blocked_id exists,我可能会添加):致命错误:未捕获异常'PDOException',消息'SQLSTATE[42S22]:未找到列:pages/sync.php:228堆栈跟踪:#0 pages/sync.php(228):PDOStatement->execute()#1 index.php(50):require('/home/vol5_3/by…')2{main}在第行的pages/sync.php中抛出228@user2965339确保您的表
blocks
已经有列
blocked\u id
了!这是wierd部分。。。
    $sql="CREATE VIEW MY_VIEW as
    SELECT
        room_user.*,
        user.username AS user_name,
        user.group_id AS group_id, USER.USER_ID
    FROM {$x7->dbprefix}room_users room_user
    INNER JOIN {$x7->dbprefix}users user ON
        user.id = room_user.user_id
    WHERE
        room_id IN ({$rooms})";
    $sql1 = "CREATE TEMPORARY TABLE tmp_room_users_x0001 (
     -- the list of fields here ...
    )";


    // populate the table ...
    $sql2 = "INSERT INTO tmp_room_users_x0001 (SELECT
        room_user.*,
        user.username AS user_name,
        user.group_id AS group_id, USER.USER_ID
    FROM {$x7->dbprefix}room_users room_user
    INNER JOIN {$x7->dbprefix}users user ON
        user.id = room_user.user_id
    WHERE
        room_id IN ({$rooms})";