안녕하세요! 쿼리문 질문드려봅니다^^;
CMS/프레임워크 | Rhymix 1.9 |
---|---|
개발 언어 | PHP 7.1 |
문제 페이지 주소 | 비공개 (작성 후 5일 경과) |
안녕하세요^^
너무 오랬만에 인사드립니다!
창업 커뮤니티를 만들고 있습니다.
그러던 중 아무리 고민하고 해결하려 해도 쿼리문이 해결이 안되어 이렇게 여쭤봅니다.
서비스(service) 라는 테이블안에 멤버srl, 제공하는 서비스키워드(service_keyword), 제품번호 (item_srl)
가 저장됩니다.
그리고 누군가 새로 서비스를 등록하면 위에 정보들이 저장되며 중복을 방지하기 위해 자동적으로 item 이라는 테이블에 item_srl과 item의 내용 (item_sub - 중복이 여러번 되기때문에 참조해서 씀) 이 저장됩니다.
제가 사용하고 싶은 쿼리는 유저가 키워드를 검색하면
1번 조건 : 유저가 등록해놓은 서비스 키워드(service_keyword)에서 단어를 검색해서 보여줌
2번 조건 : 등록해놓은 아이템 상세 내용(item_sub) 중에서 단어를 검색해서 보여줌 입니다.
둘중 하나가 해당되면 보여주기 위해 pipe=or 로 만들었습니다.
결과는 service테이블의 결과를 보여줍니다. ( <index var="sort_index" default="service.service_srl" order="desc" />)
문제는 잘 짰다고 생각하는데... 쿼리문을 <group>지정없이 1번조건과 2번조건을 각각 쓰면 검색이 잘 됩니다.
그런데 2가지의 조건 중 하나만 만족해도 출력이 되도록 <group>을 지정하고 pipe=or로 하는순간...
item_sub 에 들어가있는 단어는 예상대로 검색은 잘되는데 service_keyword 에 있는 단어가 검색 되면
service_keyword에서 검색된 서비스 수 x item (DB 전체 개수 127개) 검색이 되서 결과가 이미지처럼 출력이 됩니다.
단 1개만 검색이 되어야 하는데요 ㅠ_ㅠ
고수님들께 늦은밤 부탁드립니다!
<query id="getsearchmyservicelist" action="select">
<tables>
<table name="service"/>
<table name="item"/>
</tables>
<columns>
<column name="service.*" />
<column name="item.*" />
</columns>
<conditions>
<group>
<condition operation="equal" column="service.member_srl" var="member_srl" />
<condition operation="like" column="service.service_keyword" var="search_keyword" pipe="and"/>
</group>
<group pipe="or">
<condition operation="equal" column="service.member_srl" var="member_srl" />
<condition operation="equal" column="item.item_srl" var="service.item_srl" pipe="and" />
<condition operation="like" column="item.item_sub" var="search_keyword" pipe="and" />
</group>
</conditions>
<navigation>
<index var="sort_index" default="service.service_srl" order="desc" />
<list_count var="list_count" default="10" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />
</navigation>
</query>
댓글 6
복잡한 쿼리 같지는 않은데 작동이 안되서 이상하더라구요.
제가 쿼리문을 잘못 알고 있는건지.
중복되는 넘들만 안되게 하면되는데 어찌 방법이 없을까요? ㅠ_ㅠ
ODB는 써보지 않아서 ㅠ_ㅠ
다른 사람이 작성한 코드는 항상 복잡해 보이더군요.
저의 경우 테이블 스키마와 샘플 데이터 없이 본다면 쉬워도 어렵고 복잡하답니다.
conditions 태그 아래에 groups 태그를 사용해보시길 (mysql 5.7 에서는 오류가 있을수 있으니 확인해보세요)
service.service_srl 혹은 item.item_srl 을 지정해주시면 될듯하네요.
</conditions>
<groups>
<group column="service.service_srl" />
</groups>
테스트전 캐시삭제를 확실히 해주시는것을 추천드립니다.
바로 적용해 보겠습니다.
구름님 말씀해주신 내용대로 적용을 했더니
중복되지 않고 출력은 되었습니다^^
그런데 스킨에서 최종쿼리값의 count 값 을 불러오지 못해 0,1,2,3,4... 이렇게 숫자가 역이 아닌 정순으로 처리가 되더라구요.
그래서 그런가 페이지도 1페이지만 나오고
네비게이션 값을
단 <list_count var="list_count" default="1000" />의 값을 100으로 지정해주니 페이지에 상관없이 모든것이 출력되긴 했스니다^^
혹시 구름님 실례가 안된다면~
<groups>
<group column="service.service_srl" />
</groups>
이 구문이 어떤 뜻인지 알수 있을까요?
해당 colum의 같은 값을 그룹화해줍니다.