테스트 사이트 - 개발 중인 베타 버전입니다

list.php에서 sql정렬 거리계산 리스트 출력 채택완료

열공중 4년 전 조회 2,038

bbs/list.php 원본

if ($is_search_bbs) {

    $sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";

} else {

    $sql = " select * from {$write_table} where wr_is_comment = 0 ";

    if(!empty($notice_array))

        $sql .= " and wr_id not in (".implode(', ', $notice_array).") ";

    $sql .= " {$sql_order} limit {$from_record}, $page_rows ";

}

 

아래와 같이 수정하니 리스트 출력이 안되네요. ORDER BY를 빼면 출력은 되는데 정렬이 안되고요.

if ($is_search_bbs) {

    $sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";

} else {

    //$sql = " select * from {$write_table} where wr_is_comment = 0 ";

    $sql = "SELECT *, (6371*acos(cos(radians($aa1))*cos(radians(wr_16))*cos(radians(wr_17) - radians($aa2))+sin(radians($aa1))*sin(radians(wr_16)))) AS distance FROM {$write_table} where wr_is_comment = 0 ORDER BY distance";

    if(!empty($notice_array))

        $sql .= " and wr_id not in (".implode(', ', $notice_array).") ";

    $sql .= " {$sql_order} limit {$from_record}, $page_rows ";

}

 

bbs/list.php가 아닌 단독으로하면 정상적으로 출력이되는 코드입니다.

$sql = "SELECT *, (6371*acos(cos(radians($aa1))*cos(radians(wr_16))*cos(radians(wr_17) - radians($aa2))+sin(radians($aa1))*sin(radians(wr_16)))) AS distance FROM {$write_table} ORDER BY distance";

 

아래 두곳에 적용해서 출력하려면 어떻게 해야하는지요?

// 여기

$sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";</p>

<p> </p>

<p>// 여기

$sql = " select * from {$write_table} where wr_is_comment = 0 ";</p>

<p> </p>

<p>// 위 두곳에 아래것을 적용하려면 어떻게해야 하는지요?

$sql = "SELECT *, (6371*acos(cos(radians($aa1))*cos(radians(wr_16))*cos(radians(wr_17) - radians($aa2))+sin(radians($aa1))*sin(radians(wr_16)))) AS distance FROM {$write_table} ORDER BY distance";

 

아시는분들 도움 좀 부탁드립니다.

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

s
4년 전

$sql_order값 내용이 덧붙어 sql 구문이 최종적으로는  SELECT *, (6371*acos(cos(radians($aa))*cos(radians(wr_16))*cos(radians(wr_17) - radians())+sin(radians())*sin(radians(wr_16)))) AS distance FROM g5_write_free where wr_is_comment = 0 ORDER BY distance  order by wr_num, wr_reply   limit 0, 15 로 되어서 생기는 오류같습니다. 만일 오직 distance값으로만 정렬이 필요하다면 $sql_order부분을 덧붙일 필요 없다고 보아집니다. 즉 $sql .= " {$sql_order} limit {$from_record}, $page_rows "; 은 $sql .= " limit {$from_record}, $page_rows "; 로 변경하면 해결될 문제인것 같은데요. 보다 명백하게는 열공중님이 원하는 sql구문으로 변경하신후, 최종 $sql값이 작성된 다음 var_dump($sql); 코드를 삽입하고 게시판을 재호출하면 현재 실행하려는 sql구문이 출력될것입니다. 그것을 보면 order by가 두번 반복되지 않았는지? 확인해주시고요, 그것도 정상이라면 출력된 sql구문을 다시 제시해주세요. 성공을 바랍니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

열공중
4년 전
위에 균이님께 댓글 드렸듯이 그렇게해도 출력이 안됩니다.

하도 안되어서 완벽하게 원하는 형태는 아니지만 아쉬운대로
저 코드로 그냥 스킨에서 출력하는거로 해결했습니다.

두분 모두 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

4년 전

</p>

<p> <span class="token variable">$sql</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"SELECT *, (6371*acos(cos(radians(<span class="token interpolation"><span class="token variable">$aa1</span></span>))*cos(radians(wr_16))*cos(radians(wr_17) - radians(<span class="token interpolation"><span class="token variable">$aa2</span></span>))+sin(radians(<span class="token interpolation"><span class="token variable">$aa1</span></span>))*sin(radians(wr_16)))) AS distance FROM <span class="token interpolation"><span class="token punctuation">{</span><span class="token variable">$write_table</span><span class="token punctuation">}</span></span> where wr_is_comment = 0 ORDER BY distance"</span><span class="token punctuation">;</span></p>

<p>여기에 ORDER BY distance <-- 이게있는데</p>

<p><span class="token variable">$sql</span> <span class="token punctuation">.</span><span class="token operator">=</span> <span class="token double-quoted-string string">" <span class="token interpolation"><span class="token punctuation">{</span><span class="token variable">$sql_order</span><span class="token punctuation">}</span></span> limit <span class="token interpolation"><span class="token punctuation">{</span><span class="token variable">$from_record</span><span class="token punctuation">}</span></span>, <span class="token interpolation"><span class="token variable">$page_rows</span></span> "</span><span class="token punctuation">;</span><span class="token punctuation"><--이렇게 하니 결과는</span></p>

<p>ORDER BY distance order by ~~~ <--- 이렇게 되니 에러나는거죠</p>

<p><span class="token variable">$sql_order <-- 이것을 빼 보세요</span></p>

<p>

 

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

열공중
4년 전
이렇게 해도 출력 안되어요.
[code]
$sql = "SELECT *, (6371*acos(cos(radians($aa1))*cos(radians(wr_16))*cos(radians(wr_17) - radians($aa2))+sin(radians($aa1))*sin(radians(wr_16)))) AS distance FROM {$write_table} where wr_is_comment = 0 ORDER BY distance";

if(!empty($notice_array))
$sql .= " and wr_id not in (".implode(', ', $notice_array).") ";
$sql .= " limit {$from_record}, $page_rows ";
[/code]

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인