在一列中存储不同的值时对搜索结果进行分组


Grouping search results when storing different values in one column

我必须从存储在MySQL表上的一些数据构建一个报告,一切都很顺利,直到我注意到我们在一列中存储多个值。这就是我的意思:

FIELDS: ID | CHOICES | AGE
VALUES: 1 | apple|orange|pear | 23
VALUES: 2 | peach|orange|pineapple|pear | 29

我需要搜索那个表,找出有多少用户喜欢梨,有多少喜欢橙色,等等。该值应该是GROUP BY但如何将CHOICE列的内容分解为单独的字段以便进行搜索和分组呢?这段代码是从一个PHP文件执行的,所以如果需要的话,我也可以预处理数据,不过如果可能的话,我更愿意在查询中执行所有操作。

如果你不能改变数据库的设计,我建议你使用PHP。

对结果进行循环:

foreach $result
    foreach $fruits
        $fruit_array[$fruit] = $id

那么你就有了一个以fruit为索引的数组数组id作为值

但是如果可能的话改变数据库设计

前言:我是一个更好的HBase表设计师。

按照NullUserException的注释,您肯定会从更好的表模式中受益。比如:

选择


USER_ID | CHOICE


用户USER_ID | AGE

从这里,你可以做一个连接,将用户与他/她的年龄和选择关联起来,或者做一个计数,看看有多少年龄为X的人选择了水果y。

然而,要解决手头的问题,您必须选择*,然后手动计算每个用户的偏好。使用类似基数的方法不会让情况变得太糟。(编辑:PHP代码见Galen的回答)