DB 헬퍼 사용하기 관련 문의입니다.
CMS/프레임워크 | Rhymix 2.1 |
---|---|
개발 언어 | PHP 7.4 |
안녕하세요~
예제를 참고하여 아래처럼 쿼리하면 데이터가 정상적으로 출력됩니다.
{@
$result = DB::getInstance()->query(
"SELECT document_srl, title FROM documents WHERE module_srl = :module_srl LIMIT 3",
['module_srl' => 154]
);
$result = $result->fetchAll();
}
궁금한 점이 있습니다.
1) 'IN(or NOT IN)'을 넣어 응용해 봤는데 에러가 발생합니다.
에러발생
"SELECT document_srl, title FROM documents WHERE module_srl IN (:module_srl) LIMIT 3",
['module_srl' => 152,154]
아래처럼 작성하면 데이터가 정상 출력됩니다.
"SELECT document_srl, title FROM documents WHERE module_srl IN (152,154) LIMIT 3",
2) 위와 같이 쿼리를 해서 document_srl 과 title 값을 구하면 아래 loop 통해서 링크를 만들어 낼 수 있습니다.
<li loop="$result =>$key, $val">
<a href="/{$val->document_srl}">{$val->title}</a>
</li>
title과 document_srl 외 추가적으로 해당 문서에 썸네일이 있다면 그것까지 불러오고 싶습니다.
이런 것도 DB헬퍼의 쿼리로 가능한 것일까요?
예를 들어, 현 시점 기준으로 한달 간 올라온 글 중, 아이디 별로 가장 최근에 쓴 글 하나만 불러오는 것을 쿼리하고 싶은데 documents 테이블에서는 썸네일 컬럼이 없고, 혹 다른 테이블에서 썸네일 링크까지 불러오는 게 가능할지 상상이 잘 안됩니다.
긴 글 읽어주셔서 감사합니다.
댓글 2
1. MySQL의 prepared statement는 하나의 변수 안에 배열을 넣는 것을 지원하지 않습니다.
WHERE module_srl IN (?, ?) 이라고 쿼리문을 작성하고 (또는 각각 :변수명 할당)
152, 154 등의 값들도 하나씩 따로 전달해야 합니다.
불러올 갯수가 늘어날수록 물음표나 :변수명도 그만큼 더 만들어야겠지요.
2. 갯수만큼 물음표 붙이기 귀찮으면 XML 쿼리를 사용하면 됩니다
operation="in"으로 설정하고 배열을 넘기면 다 알아서 해줍니다.
편리한 것을 굳이 안 쓸 이유가...?
3. 썸네일은 DB에 저장되어 있지 않으므로 SQL로 해결할 수 없습니다.
라이믹스는 이런 부가정보도 편리하게 불러와서 사용할 수 있도록 다양한 클래스와 함수를 제공하니
글을 불러오고 댓글을 불러오는 일상적인 작업에는 SQL이나 DB 헬퍼 클래스 따위가 끼어들 틈이 없습니다.
$result = DocumentModel::getDocuments([152, 154, 156]);
foreach ($result as $val) {
$thumbnail = $val->getThumbnail(너비, 높이);
}
답변 감사드립니다.
제 질문뿐만 아니라 기진곰님께서 답변해 주시는 글들에서 여러모로 많은 도움을 받고 있습니다.
저 말고도 많은 분들이 그런 것 같네요 ^^
(아직 '좋은답변'을 누를만한 위치에 오르지 못해 글로 전합니다.^^)
그나마 익숙한 것이 mySql 이어서 썸네일 이미지 링크도 추출할 방법이 있는지 궁금했는데 불가하군요~
질문 전 엄청나게 검색을 했는데 원하던 답변을 찾지 못했던 이유도 알게 되었구요.
라이믹스가 제공하는 클래스와 함수 사용법이 아직은 요원하지만...
반면 클래스와 함수를 통해 제가 제시한 조건의 결과값을 얻을 수 있을지도 또한 더욱 궁금해 지기도 합니다.
원하는 결과를 mysql로 구하니...쿼리에 대한 응답이 느린 것 같아서 포기해야할 것 같기도 합니다.