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

Php Mysql-如何查询每个单元格中可能有多个条目的表,并在每个单元格中获得单个值的结果,php,mysql,Php,Mysql,我想选择这个表 Name Hobby John | Fishing,Traveling Mary | Reading, Tom | Music, Kate | Cooking,Reading George | Traveling, Peter | Fishing, Lisa | Cooking, 我该怎么做呢?正确使用您的表,而不是将多个爱好值塞进一列。你应该: Hobby Count Fishing | 2

我想选择这个表

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
SELECT Hobby, Count(*) FROM myTable ORDER BY Hobby GROUP BY Hobby
然后你可以做:

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

一般来说,你会做的是有一个单独的爱好表。 因此,您的第一个表将包括:nameID,name。 你的第二张表格包括:hobbyID,nameID,description。 一旦这样设置了它,就可以使用nameID将两个表链接在一起

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

当你有了它,你就可以在hobbyTable上使用count()来获得数量。

我会像@Wes那样做

如果不可能的话,我会用PHP

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

这不适用于原始问题中显示的表结构。这不适用于数据的当前形式。如果数据是正确的,那么您的查询将是正确的。他的问题是在一列中存储多个值。我在原始帖子重新格式化之前发布了这篇文章,很明显每个人都可以有不止一个爱好。这个表的设计真的很糟糕-应该规范化。不幸的是,我不能改变表的结构。有没有办法在我现有的表中进行此查询?Thanx发现了一个几乎重复的问题,Quassnoi给出了一个有趣的答案——但是我100%同意其他人对模式的规范化
$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'];
    }
}