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

쿼리문 질문입니다 채택완료

lacomparte 7년 전 조회 2,107

update문에 

order by 필드 limit1 을 넣어야 하는데..

 

구글링 해보니

SET 다음에 select 문을 써주면 된다고 해서

해주었습니다만..

 

</p>

<p>"UPDATE g5_write_report SET 

                            (

                                SELECT wr_id FROM g5_write_report WHERE wr_is_comment = 0 AND wr_parent = '{$row['wr_parent']}' AND wr_20 = '{$board['bo_subject']}' ORDER BY wr_18 DESC LIMIT 1

                            ) wr_15 = wr_15 + 1";</p>

<p>

 

mysql 문법 에러가 납니다;;

 

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

답변 3개

채택된 답변
+20 포인트
7년 전

</p>

<p>update g5_write_report set wr_15 = wr_15+1</p>

<p>    where wr_id = (</p>

<p>                select wr_id</p>

<p>                from g5_write_report</p>

<p>                where wr_is_comment=0 and wr_parent = '{$row['wr_parent']}'</p>

<p>                             AND wr_20 = '{$board['bosubject']}'</p>

<p>                ORDER BY wr_18 DESC LIMIT 1</p>

<p>             )</p>

<p>

원하는게 이런건가요?

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

답변에 대한 댓글 2개

l
lacomparte
7년 전
제가 원하는건요
신고 게시판을 만들었는데.

신고 카운팅을 하는거예요ㅎ

그래서 wr_15필드에 신고가 될때마다 같은 게시물이 있으면 +1 을 시켜서
총 몇번 신고됐는지 넣어주는 쿼리를 짜려고 했습니다.ㅎ
그래서..order by limit 1로 가장 마지막껄 가져오려고 한거구요 ㅎ

결국엔
[code]
// 기존 신고 게시물의 wr_15(신고횟수) 수를 가져옴
$sql_last = "SELECT wr_15 FROM g5_write_report WHERE wr_is_comment = 0 AND wr_parent = '{$row['wr_parent']}' AND wr_20 = '{$board['bo_subject']}'";
$row_last = sql_fetch($sql_last);

$sql_cnt = "UPDATE g5_write_report SET wr_15 = '{$row_last['wr_15']}' + 1 WHERE wr_is_comment = 0 AND wr_parent = '{$row['wr_parent']}' AND wr_20 = '{$board['bo_subject']}' AND wr_13 = '{$member['mb_id']}'";

sql_query($sql_cnt);
[/code]

이렇게 해서 하긴 했는데..
주신 소스로도 한번 해보겠습니다 ㅎ

기왕이면 쿼리 한줄이 낫죠 ㅎㅎ
감사합니다 :D
나시
7년 전
쿼리 한줄이라는 의미는 별도의 트랜잭션 없이 처리할수 있는 장점이 있죠
물론 이런 신고의 경우 트랜잭션에 의해 꼬일 가능성은 희박해 보이네요

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

그누위즈

신고가 되면 해당 글의 wr_15 여분필드에 들어있는 값에 +1해서 update하면 끝아닌가요?

그누보드의 게시글 작성시 게시판 글수를 카운팅 하기위해서 게시판의 bo_count_write 필드에 숫자가 +1씩 쌓입니다.

bbs/write_update.php

</p>

<p>// 게시글 1 증가

sql_query("update {$g5['board_table']} set bo_count_write = bo_count_write + 1 where bo_table = '{$bo_table}'");

위와 같은 형식으로 하면 신고된 글에 +1 씩 넣으시면 되지싶네요

 

참고로 지금 update문에 서브쿼리로 selete 하는 방식은 아주 잘못된 방식입니다.

그렇게 사용하실 거면 차라리 update 이전에 selete를 하시고

그 값을 가지고 update문에 사용하세요 그런식의 쿼리를 구성하시면 직관적이지 않기 때문에

나중에 수정할 때 어려움을 겪습니다.

기왕이면 쿼리 한줄이 좋은게 아닙니다. 남이 보았을때 직관적으로 소스가 일관성이 있어야합니다.

한번에 처리가 안되면 2번 쿼리를 돌리는 것도 나쁘지않습니다.

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

답변에 대한 댓글 1개

l
lacomparte
7년 전
넵 알아보기 힘들어서
select 후 넣어 주었습니다 ㅎ
신고 게시판이 좀 복잡한게..

게시물 신고가 되면
g5_write_report 테이블에
신고 게시물의 row 가 몽땅 들어오거든요
wr_id 값만 제외하고 몽땅 들어와서
같은 wr_parent 인데 bo_table 이 다른 경우도 있어서요.

무튼 말씀 감사드립니다!

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

플라이
7년 전

왜 이렇게 쓰신건지는 모르겠는데요 select 문은 where 문에서 처리해 주는 방식은 알겠지만 update 문에서 왜 이렇게 사용하시는건지 잘 모르겠네요

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

답변에 대한 댓글 1개

l
lacomparte
7년 전
가장 최근의 게시물에 update를 시켜주려고 select 문을 사용했습니다.
근데 결과가 제가 원하는 방향으로 나오지 않아서
수정했구요 ㅎ

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

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

로그인