MySQL / ASP - 混淆SQL查询

时间:2011-09-15 22:16:21

标签: mysql sql database asp-classic

我有一个名人照片网站,10万张照片并且还在增长。用户已经搜索了“奥斯卡颁奖典礼”,目前我正在浏览结果以显示相关照片。

现在,我想提供一个搜索优化列,它位于结果旁边,将显示在该特定事件中拍摄的人物的特定名称(基于结果中的photoID),显示照片数量接下来每个名称,并按最高数量的顺序显示名称。

像这样:


您搜索过:“奥斯卡颁奖典礼”(12,489)

特定人群:

布拉德皮特(1,726)

Angelina Jolie(1,302)

爱德华诺顿(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')

我不是在寻找确切的代码,虽然它会非常有用,但我只是在寻找有关如何正确实现这一目标的建议。我认为我的大脑能够展示相关人员,但不是以任何顺序,当然也没有计算!

感激不尽的任何帮助......

P.S。当我得到一个有效的解决方案时,我会将它应用到我的事件表和关键字中。这意味着如果有人搜索“布拉德皮特”,“奥斯卡颁奖典礼”活动将出现在“精确搜索”专栏中,旁边有1,726个活动。

2 个答案:

答案 0 :(得分: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非常相似)

答案 1 :(得分:0)

这是在sql查询之外,但是看看solr和faceting ......你可以进行搜索,然后通过facet进行优化。您还可以获得自动完成,拼写检查和词干等整洁功能。