MySQL / ASP - Запутанный запрос SQL - PullRequest
1 голос
/ 16 сентября 2011

У меня есть веб-сайт с фотографиями знаменитостей, 100 000 фотографий и их рост.Пользователь выполнил поиск "Церемония награждения Оскаром", и я в настоящее время перебираю результаты для отображения соответствующих фотографий.

Теперь я хотел бы предложить столбец уточнения поиска, который расположен рядом с результатами, чтопокажет конкретные имена людей, которые были сфотографированы на этом конкретном мероприятии (на основе идентификаторов фотографий из результатов), показывая количество фотографий рядом с каждым именем и отображая имена в порядке наибольшего количества.

Примерно так:


Вы искали:"Церемония вручения премии Оскар" (12 489)

Конкретные люди:

Брэд Питт (1726)

Анджелина Джоли (1302)

Эдвард Нортон (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', чтобы получить список людей, связанных с этими photoID, мне нужно показать количество и упорядочить их по количеству.

Какмогу ли я пойти на это?Это можно сделать одним запросом?Придется ли мне записывать результаты в таблицу, чтобы можно было их посчитать и упорядочить?

Это то, что я сделал до сих пор, но перечисляет только имена людей:

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

IЯ не ищу точный код, хотя это было бы очень полезно, я просто ищу совет о том, как выполнить это правильно с учетом производительности.Я думаю, что мой мозг способен показать соответствующих людей, но не в любом порядке и, конечно, без подсчета!

Любая помощь, с благодарностью полученная ...

PS Когда я получаю рабочее решение вместеЯ буду применять это к моей таблице событий и ключевых слов тоже.Это означает, что если кто-то искал «Брэда Питта», событие «Церемония вручения премии Оскара» появится в столбце «Уточненный поиск» с 1726 рядом с событием.

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

Если я правильно понимаю вашу схему, это должно работать:

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 голосов
/ 16 сентября 2011

Это за пределами SQL-запроса, но посмотрите на solr и faceting ... вы можете выполнить поиск, а затем уточнить по аспектам. Вы также получите аккуратные функции, такие как автозаполнение, проверка орфографии и определение границ.

...