需要Sql查询针对给定的情况

时间:2014-04-24 19:49:16

标签: php mysql sql

我面临着为以下问题编写SQL查询的问题。 需要帮忙!提前谢谢。

Create Table People(

    person varchar(255);
    search varchar (255);

)

这里每个人都可以搜索不同的公司。例如:(作为插入表格)

INSERT People VALUES('messi','google');
INSERT People VALUES('ronaldo','yahoo');
INSERT People VALUES('messi','google');
INSERT People VALUES('ronaldo','google');
INSERT People VALUES('messi','yahoo');
INSERT People VALUES('messi','yahoo');

现在我想在谷歌和雅虎上搜索多少次梅西和罗纳尔多 但是,我不能在sql QUERY中使用词汇messi和ronaldo ......

我的结果表将如下所示

Table Result(

    person varchar(255),
    number of times search on google,
    number of times search on yahoo,

)

2 个答案:

答案 0 :(得分:3)

您需要添加如下的GROUP BY子句:

SELECT
    person,
    search,
    COUNT(*) AS `search_count`
FROM People
GROUP BY person, search

您还应该为每个字段添加索引以优化分组。

请注意,这并不是您询问的结果集格式,但它比每个搜索引擎都有一个列更具可扩展性。例如,当您的数据中有其他搜索引擎(Bing,Ask.com等)时会发生什么?您必须重写您的查询以返回更多列,并且您的代码将处理结果集,而不会有其他列。

通过执行以下操作,将此结果集数据映射到更有用的数据结构(在您正在查找的行中)非常简单:

$array = array();
while ($row = /* Your DB row fetch mechanism here */) {
   $array[$row['person']][$row['search']] = $row['search_count'];
}

这会生成一个多维数组,您可以访问:

echo $array['messi']['google']; // count of google searches for messi
echo $array['messi']['yahoo']; // count of yahoo searches for messi

答案 1 :(得分:2)

我认为这就是你要找的东西。试一试

select person,
sum(case when search = 'google' then 1 else 0 end) as count_google_search,
sum(case when search = 'yahoo' then 1 else 0 end) as count_yahoo_search
from People
GROUP BY person

在此处查看演示http://sqlfiddle.com/#!2/77bb1/2

修改

根据帕特里克的评论

select person,
sum(search = 'google') as count_google_search,
sum(search = 'yahoo') as count_yahoo_search
from People
GROUP BY person