0

假设我们的数据库中有一个表(在示例中很简单,实际上我们将有更多的表、属性和它们之间的连接)

book(book_id, name, attr1, attr2, attr3)

因此,使用搜索表单,用户会创建一个带有 get 参数的 url,它会产生一些结果。在结果页面的 sideSearch 表单中,我想要计算符合搜索条件的书名、attr1、attr2 等。例如,如果用户想要 attr3 = 'something' 我想要在我的 sideSearch 中具有 attr3 = 'something' 的其他字段的数量

book_name_1   num_1
book_name_2   num_2
attr1_1       num_1
attr1_2       num_2

在我的应用程序中 book_names 和 attrs 是已知的。我能想到的唯一方法是在 for 循环中(1000-1500 次重复)

select count(*) from book where name='book_name_1' and attr3 = 'something'

等等。你能想出一个更好的方法来做到这一点吗?我正在使用 php。

4

2 回答 2

0

我会做的

SELECT name,COUNT(name) FROM book WHERE attr3 = 'something' GROUP BY name
SELECT attr1,COUNT(attr1) FROM book WHERE attr3 = 'something' GROUP BY attr1
SELECT attr2,COUNT(attr2) FROM book WHERE attr3 = 'something' GROUP BY attr2

等等。我还会再查询一个结果。所以一般来说,我将在页面中有大约 10 个查询。在我的应用程序中,我保存了 $from 和 $where 部分,因此我不需要再次编写它们,否则我正在考虑使用视图表。如果您想到更好的方法,请发表评论。

于 2012-08-08T11:23:50.293 回答
0

查看 mysql FULLTEXT 索引并在这些字段上搜索,您可能会受益匪浅。你没有提到它 - 如果没有其他原因 - 你应该尝试它,然后如果它不起作用则打折。http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

我在进行全文搜索的多重搜索中取得了成功,然后如果找到少于 n 个结果,我们将使用 tag= 样式搜索作为替代方法。

于 2012-08-08T11:37:55.617 回答