嵌套查询中的MySQL错误

时间:2012-03-16 13:24:53

标签: php mysql insert

我在PHP中有以下代码:

SELECT (
    SELECT (
        SELECT `forum_posts.id`,`forum_posts.author`,`forum_posts.author_id`, `forum_boards.date`, MIN(`forum_posts.date`) FROM `forum_posts`
        WHERE `parent` IN
            (SELECT `id` FROM `forum_boards` WHERE `parent`="'.Oflow(intval((isset($_GET['id']) ? $_GET['id'] : '0'))).'")
        INNER JOIN `forum_boards`
        ON `forum_boards.id`=`forum_posts.id`
        ORDER BY `update_date` DESC
        LIMIT 1
        GROUP BY `parent`;
    ) ORDER BY `order_large`,`order`;
) UNION (
    SELECT `name`,`id`,`info`,`parent_name` FROM `forum_boards` WHERE `parent`="'.Oflow(intval((isset($_GET['id']) ? $_GET['id'] : '0'))).'" ORDER BY `order_large`,`order
)

这是一个获取论坛系统中的董事会和职位列表的脚本。它应该做的是从表“板”和“帖子”获取数据。然后它尝试在当前正在查看的电路板的子板中找到最新的帖子。然后,它尝试加入“父”和板“id”togeather,以便匹配列并相应地对帖子进行排序。最后,执行UNION以将新发现的和有序的帖子与实际的论坛数据相结合。

错误:

  

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在第7行的“INNER JOIN forum_boards ON forum_boards.id = forum_posts.id ORDER BY”附近使用正确的语法

问题是,它不起作用!我仔细检查了每个列和表名,它们都存在。这是一个非常“alpha”的代码,所以如果你有任何效率提示,那就太棒了。

1 个答案:

答案 0 :(得分:0)

您不能在WHERE子句中使用INNER JOIN,这是您的查询尝试执行的操作

SELECT (
    SELECT (
        SELECT `forum_posts.id`,`forum_posts.author`,`forum_posts.author_id`, `forum_boards.date`, MIN(`forum_posts.date`) FROM `forum_posts`
        WHERE `parent` IN
            (SELECT `id` FROM `forum_boards` WHERE `parent`="'.Oflow(intval((isset($_GET['id']) ? $_GET['id'] : '0'))).'")
        INNER JOIN `forum_boards` ## This is effectively JOINing within a WHERE clause
        ON `forum_boards.id`=`forum_posts.id`
        ORDER BY `update_date` DESC
        LIMIT 1
        GROUP BY `parent`;
    ) ORDER BY `order_large`,`order`;
) UNION (
    SELECT `name`,`id`,`info`,`parent_name` FROM `forum_boards` WHERE `parent`="'.Oflow(intval((isset($_GET['id']) ? $_GET['id'] : '0'))).'" ORDER BY `order_large`,`order
)

您可能需要重新考虑一下您的查询。