강성문
102
2021-06-23 14:35:14
10
189

mysql 쿼리 질문


하고자 하는 것은 테이터베이스에 저장된 것에 따라

동적으로 자동 select가 만들어지도록 하고

선택된 select에 따라 내용이 보여지는 것입니다.


#테이블 구조

create table select_test(
	id int not null auto_increment primary key,
	kinds_1 varchar(100) not null,
	kinds_2 varchar(100),
	kinds_3 varchar(100),
	contents varchar(1000)
)

현재 테이블 구조입니다.


select를 동적으로 만들려면 항목들을 구분해서

select를 만들어야 한다고 생각해서

이런 값들을 넣어서 테스트 했습니다.


하여 생각한게 

SELECT SUBSTRING_INDEX( 
distinct CONCAT(
   TRIM(kinds_1),"@",TRIM(kinds_2),"@",TRIM(kinds_3)),'@',1 
) sum from select_test;

이런 쿼리입니다.

잘 되었다면 질문이 없었겠지요ㅠㅠㅠ

distinct가 안먹힙니다...

select 
  SUBSTRING_INDEX( CONCAT( 
      TRIM(kinds_1),"@",TRIM(kinds_2),"#",TRIM(kinds_3) ),'@',1 ) sum1, 
  substring_index( SUBSTRING_INDEX( CONCAT( 
      TRIM(kinds_1),"@",TRIM(kinds_2),"#",TRIM(kinds_3) ),'@',-1 ),'#',1 ) sum2,
  substring_index( SUBSTRING_INDEX( CONCAT( 
      TRIM(kinds_1),"@",TRIM(kinds_2),"#",TRIM(kinds_3) ),'@',-1 ),'#',-1 ) sum3 
from select_test;

이렇게 까지는 했는데 중복제거를 못했습니다.


이렇게 하고 싶습니다!


고수님들 기다리겠습니다ㅎㅎ

0
  • 답변 10

  • youngyoung
    2k
    2021-06-23 14:41:12

    group by 를 쓰세요

  • 웹개발자해보자
    176
    2021-06-23 14:45:07
    group by 사용하면 되지않을까요?
  • 강성문
    102
    2021-06-23 14:47:00

    group by를 어디에다 쓰면 될까요?

    이해를 못해서 자세히 설명 부탁드립니다!

  • 웹개발자해보자
    176
    2021-06-23 14:58:52

    저도 sql은 잘보르지만 맨뒤에 group by kinds_3; 이런식으로 하면되지 않을까요?

  • 강성문
    102
    2021-06-23 15:05:51
    select * from select_test group by kinds_3;
    select 
      SUBSTRING_INDEX( CONCAT( 
          TRIM(kinds_1),"@",TRIM(kinds_2),"#",TRIM(kinds_3) ),'@',1 ) sum1, 
      substring_index( SUBSTRING_INDEX( CONCAT( 
          TRIM(kinds_1),"@",TRIM(kinds_2),"#",TRIM(kinds_3) ),'@',-1 ),'#',1 ) sum2,
      substring_index( SUBSTRING_INDEX( CONCAT( 
          TRIM(kinds_1),"@",TRIM(kinds_2),"#",TRIM(kinds_3) ),'@',-1 ),'#',-1 ) sum3 
    from select_test group by sum3;

    제 생각 범위 안에 있는 두 가지 방법을 써도

    언어의 PHP와 데이터베이스의 PHP가 분리가 안되고

    합쳐져 버립니다...



    이렇게요...

  • 초보킴
    300
    2021-06-23 15:08:58

    강성문

    혹시 별칭 sum3 기준으로 병합하고 싶으신건가요 ?


  • 강성문
    102
    2021-06-23 15:09:59

    초보킴

    꼭 그런건 아닙니다.

    저렇게 한 이유는 합쳐서 중복을 제거하고

    나누면 될 것 같다고 생각했기 때문입니다.


  • 웹개발자해보자
    176
    2021-06-23 15:11:48
    select 
      SUBSTRING_INDEX( CONCAT( 
          TRIM(kinds_1),"@",TRIM(kinds_2),"#",TRIM(kinds_3) ),'@',1 ) sum1, 
      substring_index( SUBSTRING_INDEX( CONCAT( 
          TRIM(kinds_1),"@",TRIM(kinds_2),"#",TRIM(kinds_3) ),'@',-1 ),'#',1 ) sum2,
      substring_index( SUBSTRING_INDEX( CONCAT( 
          TRIM(kinds_1),"@",TRIM(kinds_2),"#",TRIM(kinds_3) ),'@',-1 ),'#',-1 ) sum3 
    from select_test group by sum1,sum2,sum3;

    from select_test group by sum1,sum2,sum3;이것도 안되시나요?

  • 초보킴
    300
    2021-06-23 15:11:59

    group by sum1, sum2, sum3으로 해보세용

  • 강성문
    102
    2021-06-23 15:54:31 작성 2021-06-23 15:56:56 수정됨

    여러개로 그룹바이 할 생각까지는 못했네요...

    감사합니다 고수님들ㅎㅎ

    아직까지 나무밖에 못보네요ㅠㅠ


    이게 가능하다고 하니 복잡하게 할 필요 없이

    select * from select_test group by kinds_1, kinds_2, kinds_3;

    이걸로 쓸게요!

  • 로그인을 하시면 답변을 등록할 수 있습니다.