【问题标题】:database produce result and number of other fields in php数据库在php中生成结果和其他字段的数量
【发布时间】:2012-08-08 19:37:55
【问题描述】:

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

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。

【问题讨论】:

  • 我猜您希望仅通过一次查询就可以接收图书数据和结果数。你问的是这个吗?
  • 是的,但是一组结果数,例如每个书名、每个 attr1 等的结果数,也符合搜索条件。

标签: php mysql database


【解决方案1】:

我会这样做的

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 部分,因此我不需要再次编写它们,否则我正在考虑使用视图表。如果您有更好的方法,请发表评论。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 据我了解,FULL TEXT 用于添加搜索词的所有世代,这对我没有用,因为我的属性是枚举类型(它们可以具有特定值),虽然我有它们现在在 varchar 中(也许我稍后会更改)。
    猜你喜欢
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2013-08-06
    相关资源
    最近更新 更多