2013-12-20 11 views
0

일부 MySQL의 시험은 내가 첫 번째 게시물 (주문에 의해를 잡기 위해 노력하고있어 기본적으로phpbb 게시물 정렬. 원래 게시물은 먼저 날짜순으로 내림차순으로 정렬됩니다. 여기에서 오류가 발생 내 최신 시도의 최종 결과입니다

SELECT result.* FROM (SELECT p.post_id FROM phpbb_posts p WHERE p.topic_id = 297 limit 1 ORDER BY p.post_time ASC UNION SELECT p.post_id FROM phpbb_posts p WHERE p.topic_id = 297 ORDER BY p.post_time DESC) result ORDER BY result.id LIMIT 10 

(답 내가 MySQL의 질문에 대한 여기에 본 적이 기준) p.post_time 오름차순 한도 1), 가장 최근 게시물을 먼저 표시하려면 항목의 내림차순으로 추가하십시오.

phpbb의 포럼에서 찾을 수있는 지원이 없습니다 (예 : 제어판에서 설정할 수 있지만 원래 게시물은 주제 끝에 표시됩니다). 이 쿼리에 대한 viewtopic.php의

실제 코드는 (적어도 나는 그것을 변경하려면 올바른 위치 믿습니다) :

$sql = 'SELECT p.post_id 
    FROM ' . POSTS_TABLE . ' p' . (($join_user_sql[$sort_key]) ? ', ' . USERS_TABLE .  ' u': '') . " 
    WHERE p.topic_id = $topic_id 
     " . ((!$auth->acl_get('m_approve', $forum_id)) ? 'AND p.post_approved = 1'  : '') . " 
     " . (($join_user_sql[$sort_key]) ? 'AND u.user_id = p.poster_id': '') . " 
     $limit_posts_time 
    ORDER BY $sql_sort_order"; 
$result = $db->sql_query_limit($sql, $sql_limit, $sql_start); 

나는이 잠시에서있었습니다. 나는 게으른 게 아니라 적어도 오늘 밤은 피곤하고 내 깊이에서 빠져 나간다.

감사합니다.

+0

아마 by' 위해'전에 오류를 던지고 원래의 게시물을 포함하지 않는 확인하는 것입니다 그리고 당신이 T2에서 'result.id'하지만 거기에 하위 쿼리에 'id'라는 열이 없습니다. –

답변

0

첫 번째 쿼리에서 가장 초기/원본 게시물을 얻는 중이고 post_time desc까지 9 개의 최신 게시물 순서를 추가하는 것처럼 보입니다. 그럼 어쩌면 그냥 마지막에 정렬에 사용되는이 (sqlFiddle)

SELECT post_id,timeorder FROM 
(SELECT p.post_id,now()as timeorder FROM phpbb_posts p WHERE p.topic_id = 297 ORDER BY p.post_time ASC LIMIT 1)T1 
UNION 
SELECT post_id,timeorder FROM 
(SELECT p.post_id,p.post_time as timeorder FROM phpbb_posts p WHERE p.topic_id = 297 
     AND EXISTS(SELECT 1 FROM phpbb_posts p2 WHERE p2.post_time < p.post_time AND p2.topic_id = 297) 
    ORDER BY p.post_time DESC LIMIT 9)T2 
ORDER BY timeorder DESC 

쿼리에서 timeorder 같은 쿼리가되도록 원래의 게시물은 첫 번째 행 다음 행의 나머지는 최신 게시물 order by post_time desc

입니다

EXISTS 검사 (아직 T1에 의해 선택되어 있기 때문에) 당신은`limit`을 가지고 있기 때문에

+0

당신이 가까이 있다고 생각합니다. 그것을 던질 수있는 한가지는 우리가 첫 번째 페이지에 있지 않을 때입니다. (첫 번째 페이지의 맨 위에 원래의 게시물을 놓고 싶지 않다고 가정 할 때). 시행 착오를 통해 해결책을 찾아 냈습니다. 해결할 수없는 문제가 발생하면이 방법을 시도 할 것입니다. 고맙습니다. (도움이되는 다른 것을 자유롭게 추가하십시오). – user3097845

+0

당신은 언제나 질의 끝 부분에'LIMIT startRow, HowManyRowsYouWant'를 추가 할 수 있으며'LIMIT 9 '을 꺼내면 항상 작동 할 것입니다 –