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'];
}
}