我在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以将新发现的和有序的帖子与实际的论坛数据相结合。
错误:
问题是,它不起作用!我仔细检查了每个列和表名,它们都存在。这是一个非常“alpha”的代码,所以如果你有任何效率提示,那就太棒了。您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在第7行的“INNER JOIN
forum_boards
ONforum_boards.id
=forum_posts.id
ORDER BY”附近使用正确的语法
答案 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
)
您可能需要重新考虑一下您的查询。