我有mysql表,如下所示:
id place interest
1 place1 a,b,c
2 place2 c,d,e
3 place1 a,e
4 place2 f
5 place2 f
6 place3 g,h
我需要根据计数对唯一的“地点”和“兴趣”值进行排序。 因此,“地点”的输出将是
place2(3)
place1(2)
place3(1)
因此,“兴趣”的输出将是
a(2)
c(2)
e(2)
f(2)
b(1)
d(1)
g(1)
h(1)
有没有办法在PHP-Mysql中执行此操作?
所以,我能够获得简单的列数据
SELECT place,
COUNT( * ) AS num
FROM testtab
GROUP BY place
ORDER BY COUNT( * ) DESC
答案 0 :(得分:1)
由于mysql无法容纳数组,因此最好像这样构建一个新表:
interest_id interest_name
1 a
2 b
另一个保持关系:
pk id interest_id
1 1 1
2 1 2
这个id是主表中记录的id。
有了这个,您可以轻松使用:
select count(*) from THIRD_TABLE where id = YOUR_ID
答案 1 :(得分:0)
你可以这样做。
$place = array();
$interests = array();
foreach($rows as $row){
if (!isset($place[$row["place"]])){
$place[$row["place"]] = 0;
}
$place[$row["place"]]++;
$ints = explode(",", $row["interests"]);
foreach($ints as $int){
if (!isset($interests[$int])){
$interests[$int] = 0;
}
$interests[$int]++;
}
}
这将为您提供键入相关字段的两个数组,其值为count。如果这将是您的应用程序中的常见操作,那么按照AliBZ的建议将数据规范化更有意义。
答案 2 :(得分:0)
这是您需要的第一个结果
SELECT place,COUNT(interest)
FROM `testtab`
GROUP by place
ORDER BY COUNT(interest) desc
答案 3 :(得分:0)
可以做到这一点:
$inst_row = '';
foreach($rows as $row){
$inst_row .= $row['interests'];
}
$inst_values = explode(',', $inst_row);
$inst_count = array_count_values($inst_values);
// $inst_count will return you count as you want ,print_r it and format it accordingly