2012-03-16 7 views
0

I PHP에 다음 코드가 있습니다MySQL의 오류

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을 수행하여 새롭게 발견되고 정렬 된 게시물을 실제 포럼 데이터와 결합합니다.

오류 :

이 문제가

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 'INNER JOIN forum_boards ON forum_boards.id = forum_posts.id ORDER BY' at line 7

, 그것은 작동하지 않습니다! 모든 열과 테이블 이름을 두 번 확인했는데 모두 존재합니다. 이것은 매우 "알파"코드입니다. 효율성에 대한 조언이 있다면 위대합니다.

답변

0

당신은 INNER는 쿼리에

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 
) 
당신은 당신의 쿼리 조금 다시 생각해야 할 수도 있습니다

을하려고하는 것입니다 WHERE 절에 가입 할 수 없다.

+0

이렇게하는 방법에 대한 제안 사항이 있습니까? –

+0

@ConnorPeet 나는 당신이 달성하고자하는 것을 100 % 명확히하지 않습니다. 어쩌면 일부 샘플 데이터와 일부 샘플 출력을 명확히하기 위해 게시 할 수 있습니다. – liquorvicar