0

次のような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)

したがって、「interest」の出力は次のようになります。

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
4

4 に答える 4

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
于 2013-06-21T19:22:48.903 に答える
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]++;
    }
}

これにより、関連するフィールドからキーオフされた 2 つの配列が得られ、値はカウントになります。これがアプリケーションで一般的なアクションになる場合は、AliBZ で提案されているようにデータを正規化する方が理にかなっています。

于 2013-06-21T19:26:21.530 に答える
0

これは、必要な最初の結果用です

SELECT place,COUNT(interest)
FROM `testtab`
GROUP by place
ORDER BY COUNT(interest) desc
于 2013-06-21T19:59:32.310 に答える
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
于 2013-06-21T20:19:12.157 に答える