2011-09-15 2 views
1

저는 연예인 사진 웹 사이트, 10 만 장의 사진을 보유하고 있습니다. 사용자가 "Oscar Awards Ceremony"검색을 수행했으며 현재 관련 사진을 표시하기 위해 결과를 반복합니다.MySQL/ASP - SQL 쿼리 혼동

이제 검색 결과 옆에있는 검색 상세 검색 열을 제공하고 해당 특정 이벤트에서 촬영 한 사람들의 구체적인 이름 (결과의 사진 ID를 기반으로 함)을 보여주고, 사진은 각 이름 옆에 표시되며 이름이 가장 높은 순서로 표시됩니다. 당신은 검색


:

과 같이 "오스카 시상식"(12489)

특정 사용자 :

브래드 피트 (1726)

안젤리나 졸리 (1,302)

(210)

에드워드 노턴 (929) ...


이 내 데이터베이스 스키마입니다 :

 
photoSearch (tbl) 
photoID    INT(11)   Index  Auto-Increment 
headline   VarChar(1000) FullText 
caption    VarChar(2500) FullText 
dateCreated   DateTime  Index 

photoPeople (tbl) 
photoID    INT(11) 
peopleID   INT(11) 

people (tbl) 
peopleID   INT(11)   Primary  Auto-Increment 
people    VarChar(255) Index 

그래서 기본적으로, 나는 사용자가 마지막으로 검색 PHOTOID의의 결과 세트가 있습니다. 그 결과 세트를 사용하여 'photoPeople'및 'people'테이블을 쿼리하여 해당 포토 ID와 관련된 사람들을 나열해야합니다. 수량을 표시하고 수량별로 정렬해야합니다.

어떻게해야합니까? 하나의 쿼리로 수행 할 수 있습니까? 계산하고 결과를 계산할 수 있도록 결과를 표에 써야합니까? 매우 도움이 될 것입니다하지만 난 그냥 방법에 대한 조언을 찾고 있어요, 내가 정확한 코드를 찾는 게 아니에요

 
SELECT * FROM people 
INNER JOIN photopeople ON photoPeople.peopleID = people.PeopleID 
WHERE photoID IN ('87345','8900','83458','63746') 

:

내가 지금까지 수행하지만 사람들의 이름을 나열 한 것입니다 마음에 드는 성능으로 올바르게 수행 할 수 있습니다. 나는 내 두뇌가 관련있는 사람들을 보여줄 수 있다고 생각하지만, 어떤 순서로도 그리고 확실히 카운트가없는 것은 아니다!

감사받은 어떤 도움 ...

P.S. 함께 일하는 해결책을 얻었을 때, 나는 이것을 나의 이벤트 테이블과 키워드에도 적용 할 것이다. 즉 누군가 "브래드 피트 (Brad Pitt)"를 검색하면 "검색 범위 조정"열에 "오스카 시상식"이라는 이벤트가 표시되고 그 옆에는 1,726 명이 표시됩니다.

답변

2

이 작동합니다 :

SELECT people.People AS Name, count(*) AS NumberOfPhotos 
FROM people 
INNER JOIN photoPeople ON photoPeople.peopleID = people.PeopleID 
WHERE photoPeople.photoID IN ('87345','8900','83458','63746') 
GROUP BY photoPeople.PeopleID, people.People 
ORDER BY NumberOfPhotos DESC 

(미안 해요, 난 MSSQL 더 잘 알고 있어요,하지만 난 MySQL은 매우 유사하다 가정)

+0

감사합니다.웃기는 것, 나는 단지 내가 가진 생각을 실험하고 있었고, 둘 다 매우 흡사 했으므로 광산 작업도 마찬가지였다. SELECT COUNT (명) AS totalPeople, people FROM people INNER JOIN photopeople ON photoPeople.peopleID = people .PeopleID 어디에서 photoid IN ('87345', '8900', '83458', '63746', '82039', '53696', '53697', '53698') GROUP BY 사람 ORDER BY totalPeople DESC – TheCarver

+0

플러스 그 이벤트에서 상위 5 개 이름 만 보여줄 것입니다. 따라서 성능은 괜찮을 것입니다. – TheCarver

+0

예, 걱정하지 마십시오. 한 가지 다른 의견입니다. 이미 쿼리 결과 (즉, 사진 ID)를 다른 테이블에 저장 한 다음 IN 문을 사용하는 대신 테이블에 더 잘 조인하는 것이 좋습니다. – mrcrowl

0

이것은 sql 쿼리 외부이지만 solr 및 faceting을 조사합니다 ... 검색을 수행 한 다음 패싯으로 수정합니다. 또한 자동 완성, 맞춤법 검사 및 형태소 분석과 같은 깔끔한 기능을 사용할 수 있습니다. 내가 제대로 스키마를 이해한다면

+0

덕분에, 내가 달성하기 위해 관리 이 하나의 SQL 쿼리 – TheCarver