2012-06-06 2 views
0

amazon.com에서는 즉석에서 사용자가 "New and Bestselling"별로 제품을 정렬 할 수 있습니다.MySQL : 아마존과 같은 "새로운 베스트셀러"로 가져 오는 방법은 무엇입니까?

각 항목에 대해 "uploaddate"열과 "views"열이 포함 된 "items"테이블이 있습니다. "새로운 베스트 셀러"로 항목을 정렬하고 업로드 할 & 개의보기를 결합하는 방법은 무엇입니까?

uploaddate &보기를 결합하여 항목을 가져 오기 위해이 쿼리를 어떻게 수정할 수 있습니까? "New & Bestselling"?

select * from items order by uploaddate desc, views desc 
+0

어떻게 두 열을 결합 하시겠습니까? 예를 들어 어제 500 개의보기가있는 항목 또는 2 일전에 1000 개의보기가있는 항목이이 목록에서 더 높은 항목입니까? –

+0

@ bobby-w 모르겠다! 어쩌면 날짜가보기보다 우선 순위가 높아야하므로 1 : 3 (날짜 :보기)의 비율이므로 어제/500은 2 일/1000보다 높은 우선 순위가됩니다. – evilReiko

+0

@evilReiko 두 가지를 결합하는 방법 (즉, 어떤 공식을 사용할 것인가)을 물어 보면 구현 방법을 물어볼 수 있습니다. 간단한 SQL 쿼리로 할 수있는 것에 국한되지 않습니다. 수식이 충분히 복잡해지면 최소 기준을 충족하는 모든 레코드를 선택하고 쿼리를 수행하는 데 사용하는 모든 프레임 워크로 데이터를 가져온 다음 더 멀리 처리 할 수 ​​있습니다. – octern

답변

1

내 머리 꼭대기에서 생각해 볼 수있는 세 가지 방법이 있습니다. 모두 유효한 접근 방식입니다.

1) 쿼리를 최근 7 일 (또는 "새로 만들기")로 제한하고 뷰별로 정렬하십시오. 이렇게하면 새 항목 만 표시되지만 가장 간단합니다.

2) 항목을 추가 한 지 몇 주 전에 해당하는 필드를 추가하고 CASE 문을 사용하여 해당 필드를 결정합니다. SELECT CASE(WHEN DATEDIFF(CURDATE()-uploaddate) < 7 THEN 1 ELSE 0 END AS relative week처럼 weekort별로 정렬하십시오.

3) select 명령문의 일부로 제안 된 것처럼 수식을 사용하여보기 및 업로드 날짜 필드를 기반으로 순위 번호를 생성하고이를 기준으로 정렬하십시오. 이상적으로 최대 조회수에 따라 순위를 조정하고 오래된 항목에 과한 벌칙을 부과하기 때문에 2 년 전부터 "신계와 베스트 셀러"차트 상단에 굉장히 인기있는 항목이 없기 때문에 계급을 원하는 것이 더 어렵습니다.

+0

1 & 2는 결합하지 않고 date-then-views로 정렬합니다. 이는 내가 찾고있는 것이 아닙니다. 3은 정확하게 내가 원하는 것입니다. 그러나 그것은 대답이 아닙니다. 그것은 제 질문의 표현과 같은 것입니다. 나에게 질의 예제를 제공하면 나는 정답을 줄 것이다 – evilReiko

+0

미안하지만 그건 (예전에 이런 짓을 해본 적이없는 사람처럼) 상당한 양의 추가 작업이다. 나는 단순히 당신이하고 싶은 것을 대략적으로하는 방법에 대한 몇 가지 고려 사항과 제안을하기 위해 노력했습니다. 보다 구체적인 도움이 필요하면 샘플 데이터로 원하는 동작을 정확하게 배치하는 것이 좋습니다. 행운을 빌어 요! –

+0

좋아, 고마워, 너의 대답은 내가 바라는 논리를 가지고있는 것 같아. – evilReiko

0

나는 두 개의 SELECT 문, 하나는 uploaddate으로 분류하고 한 전망으로 분류 할 것, 다음, 다음, 그들을 병합 UNION을 사용하여 그들을 중복을 방지하기 위해 또 다른 SELECT 문과 그룹을 포장.

+0

나는 당신의 아이디어를 얻었지만 예제를 제공해 줄 수 있습니까? – evilReiko

관련 문제