Mysql - 如何查询每个单元格中可能包含多个条目的表,并在每个单元格中获得具有单个值的结果

时间:2011-04-14 19:22:39

标签: php mysql

Name       Hobby
John    |  Fishing,Traveling
Mary    |  Reading,
Tom     |  Music,
Kate    |  Cooking,Reading
George  |  Traveling,
Peter   |  Fishing,
Lisa    |  Cooking,

我想选择这个表

Hobby        Count
Fishing   |  2
Traveling |  2
Reading   |  2
Music     |  1
Cooking   |  2

我该怎么做?

4 个答案:

答案 0 :(得分:2)

正确使用您的表,而不是将多个爱好值塞进一列。你应该:

John    |  Fishing
John    |  Traveling
Mary    |  Reading
Tom     |  Music
Kate    |  Cooking
Kate    |  Reading
George  |  Traveling
Peter   |  Fishing
Lisa    |  Cooking

然后你可以这样做:

select hobby
     , count(*) count
  from tablename
 group by hobby
 order by hobby

答案 1 :(得分:1)

我会像@Wes

那样做

或如果它不可能我会用PHP

$result = array();
$sql = 'SELECT Hobby, count(*) as cnt FROM youttable GROUP BY Hobby';
foreach ($conn->query($sql) as $row) {
    foreach(explode(',',$row['Hobby']) as $hobby) {
        $result[$hobby] += $row['cnt'];
    }
}

答案 2 :(得分:0)

一般来说,你要做的就是有一个单独的兴趣爱好者表。 所以你的第一个表将包括:nameID,name。 你的第二个表将包括:hobbyID,nameID,description。 设置完成后,使用nameID将两个表链接在一起。

SELECT * FROM nameTable, hobbyTable WHERE nameTable.nameID = hobbyTable.nameID

如果你有,你可以在hobbyTable上使用count()来获取数量。

答案 3 :(得分:-1)

SELECT Hobby, Count(*) FROM myTable ORDER BY Hobby GROUP BY Hobby