1

ここに私のテーブル構造があります、

ここに画像の説明を入力

クエリを実行してみます

$sql = mysql_query("SELECT content,niche, COUNT(content) TotalCount FROM table_name GROUP by content HAVING COUNT(content)>=2");

正しい結果が得られると思いますが、phpで結果をリストし、重複した行の1つを削除する削除ボタンを作成するのに問題があります

私はPHPで結果を取得します

コンテンツ ID -ニッチ ID - TotalCount
208 - 2 - 2
210 - 32 - 3

しかし、結果は

コンテンツ ID -ニッチ ID - TotalCount
208 - 2 - 2
208 - 2 - 2
210 - 32 - 3
210 - 32 - 3
210 - 32 - 3

phpで結果表示してみる

while($row = mysql_fetch_assoc($sql)) {            
    $array[] = $row;
}
foreach($array as $row) {
    echo $row['content']." - ".$row['niche']." - ".$row['TotalCount']."<br>";
}
4

3 に答える 3

2

GROUP BYこの場合、グループ化しているフィールドの結果が折りたたまれます。contentそのため、2 つの結果しか表示されません。

GROUP BYテクニックを維持したい場合は、指定された値GROUP_CONCAT(niche)ごとにコンマ区切りのリストを取得するために使用することもできます。nichecontent

SELECT
    content,
    GROUP_CONCAT(niche) AS niche,
    COUNT(content) TotalCount
FROM
    table_name
GROUP BY
    content
HAVING
    COUNT(content)>=2;

次に、PHP を使用explode(',', $row['niche'])して個別の値を取得し、それらを使用して削除する値を決定できます。

foreach($array as $row) {
    $niches = explode(',', $row['niche']);
    foreach ($niches as $niche) {
        echo $row['content'] . " - " . $niche . " - " . $row['TotalCount'] . "<br />";
    }
}
于 2013-07-20T13:25:38.150 に答える
1

これはあなたが求めているものだと思います.すべての重複行(row_id付き)とそれらが重複する回数;

SELECT a.row_id, a.content, a.niche, cnt
FROM table_name a
JOIN (
  SELECT MIN(row_id) m, COUNT(*) cnt, niche,content
  FROM table_name
  GROUP BY content,niche
  HAVING COUNT(*)>1
) b
  ON a.niche=b.niche
 AND a.content=b.content

でテストする SQLfiddle

于 2013-07-20T13:33:48.410 に答える
0

SQL で次の変更を行います。

$sql = mysql_query("SELECT content,niche, COUNT(content) TotalCount FROM table_name HAVING COUNT(content)>=2");
于 2013-07-20T13:25:48.737 に答える