제목 | SELECT 해서 RAND 함수 통해 랜덤으로 출력하되 어느 한 필드 기준으로 랜덤으로 추 | ||
---|---|---|---|
글쓴이 | AMKORDB | 작성시각 | 2016/09/19 15:13:29 |
|
|||
SELECT 해서 RAND 함수 통해 랜덤으로 출력하되 어느 한 필드 기준으로 랜덤으로 출력할수 있을까요?
예를들어
SELECT * FROM 테이블 order by category, rand();
이 구문이 있습니다.
그런데 필드 중 category 이라는 필드가 있는데
이 필드 정렬하면서 랜덤이 가능할까요?
조그만 더 자세히 하자면 예를들어 category 필드에 "IT", "회사" , "여행" 이렇게 있습니다.
그럼 순서 정렬할때 IT 인 값들 > 여행 인 값들 > 회사 인 값들
다시 새로고침하면 여행 인 값들> IT 인 값들> 회사 인 값들
이렇게는 안될까요? |
|||
다음글 | php Excel 업로드시 속도 문제 ? (2) | ||
이전글 | 안드로이드 웹뷰 로그인 유지 (1) | ||
배강민
/
2016/09/19 15:18:20 /
추천
0
|
AMKORDB
/
2016/09/19 15:24:04 /
추천
0
답변 감사합니다. 그런데 여기서 LIMIT만 빼면 될것같은데 빼면 왜 오류가 나는지 ㅠ,ㅠ
|
배강민
/
2016/09/19 15:25:45 /
추천
0
LIMIT이 있어야지 1개를 가져오는데, 없으면 여러개를 가져오는 에러일듯한데요? 여러개를 category = 과 비교할 수가 없으니까요. LIMIT을 빼야하는 이유가 따로 있는거라면 MAX를 해보시던가요. |
kaido
/
2016/09/19 15:29:06 /
추천
0
SELECT * FROM tb_category AS C WHERE C.id IN ( SELECT id FROM(SELECT id FROM tb_category ORDER BY RAND() LIMIT 1) AS T )
테스트해보니 이렇게 해야 하네요. order by rand 가 들어가면 서브 쿼리로 한번 더 감싸주고 넣어줘야 합니다. in 으로 처리 하시면 여러개 가져오기도 문제 없습니다! |
AMKORDB
/
2016/09/19 15:36:40 /
추천
0
kaido님 너무 감사합니다. !!
정말 죄송드리지만
랜덤으로 출력되나 해당 필드(category ) 데이터만 출력되네요 ㅠ,ㅠ 있는 데이터 필드값 (category )모두 출력하고싶은데 ㅠ,ㅠ 방법이 없을까요? 정말 죄송합니다 ㅠㅠ. |
kaido
/
2016/09/19 15:41:12 /
추천
0
SELECT * FROM tb_product AS P Inner join tb_category AS C ON P.cate_code = C.id WHERE C.id IN ( SELECT id FROM(SELECT id FROM tb_category ORDER BY RAND() LIMIT 1) AS T ) 이거 찾으시는 것인가요? |
AMKORDB
/
2016/09/19 15:45:58 /
추천
0
kaido >정말 죄송합니다 이걸로 해보니 필드 category 중에서 한 데이터만 출력됩니다 ㅠ,ㅠ 번거롭게 해서 죄송드립니다 ㅠ,ㅠ |
kaido
/
2016/09/19 15:53:23 /
추천
0
그러니깐 카테고리 데이터중에 1개의 로우 데이터만 나온다는 말씀이신것이죠?
그럼 리미트를 빼시면 됩니다. SELECT * FROM tb_category AS C WHERE C.id IN ( SELECT id FROM(SELECT id FROM tb_category ORDER BY RAND() ) AS T WHERE id >= 1 )
팁으로 쿼리 퍼포먼스를 올리기 위해서는 조건절 아무거나 한개 정도 들어가 주는것이 더욱 빠른 쿼리를 만듭니다. |
AMKORDB
/
2016/09/19 15:57:36 /
추천
0
정말 감사합니다!!. IMIT 10 으로 하니깐 되고 방금 올려주신것은 랜덤이 안되네요 ㅠ,ㅠ 한번 고민 해보겠습니다. 정말 죄송합니다. ㅠ.ㅠ |
kaido
/
2016/09/19 16:00:28 /
추천
0
아 실수;; order by 랑 where 랑 위치가 안맞았네요; SELECT * FROM tb_category AS C
그리고 테스트 하다 알은것이... in () 안에 limit 가 붙을경우. 전체 row 값만큼 limit를 던지면 rand() 를 무시하고 차례로 가져오네요; limit를 제거하면 전체 값을 불러도 랜덤하게 가져오고요. 오늘 신기한거 보네요; 왜 이렇게 만들어졌지 음..; mariaDB 에서는 이렇네요. |
AMKORDB
/
2016/09/19 16:19:24 /
추천
0
kaido 님 limit 제거하면 랜덤하게 가져온다는데 실례지만 그렇게 안가져오네요. 오히려 limit10으로 지정해야 랜덤으로 가져오는데 이렇게하면 한정되게 불러오고 ,ㅠㅠ |
AMKORDB
/
2016/09/19 16:26:02 /
추천
0
SELECT A.* FROM 테이블 A, ( SELECT @rownum:=@rownum+1 AS seq, C.category FROM (SELECT DISTINCT(category) AS category FROM 테이블 ORDER BY RAND()) C, (SELECT @rownum:=0) D ) B WHERE A.category=B.category ORDER BY B.seq, RAND()
해결했습니다 ㅠ,ㅠ 모두 감사합니다 kaido님 감사합니다! |
그냥 상상으로 쿼리문을 만들어본다면. (안될 수도 있습니다.)
SELECT
*
FROM
테이블
WHERE
category = (SELECT category FROM 테이블 ORDER BY category, rand() LIMIT 0, 1)
위로 되지 않을까도 싶네요.