我在php中对行进行计数和排序时遇到问题

我在php中对行进行计数和排序时遇到问题,php,mysql,pdo,Php,Mysql,Pdo,我有一个名为tags的表,它将所有给定的标记逐行存储到图像中: 我想得到最流行的标签的数据,所以我试着数一数。我成功地列出并计数了标记,但无法按值对它们进行排序 我尝试过使用ar/sort,创建第三个循环 <?php function count_tags_sql($tag) { global $db; // count $sql = $db->query("SELECT tags FROM tags WHERE tags = '$tag'"); $sql-&g

我有一个名为tags的表,它将所有给定的标记逐行存储到图像中:

我想得到最流行的标签的数据,所以我试着数一数。我成功地列出并计数了标记,但无法按值对它们进行排序

我尝试过使用ar/sort,创建第三个循环

<?php

function count_tags_sql($tag) {

  global $db;

  // count
  $sql = $db->query("SELECT tags FROM tags WHERE tags = '$tag'");
  $sql->execute();

  echo $tag.'('.$sql->rowcount().')<br>';


}

// get tags

$sql = $db ->prepare("SELECT * FROM tags");
$sql->execute();

$rows = $sql->fetchAll(PDO::FETCH_ASSOC);

  foreach($rows as $row){

    $tagname[] = $row['tags'];

  }

// remove duplicates
$tagname = array_unique($tagname);

// output tags
foreach($tagname as $tag) {

  echo count_tags_sql($tag);

}

?>

将count_tags_sql函数和$tagname for loop更改为下面的值

function count_tags_sql($tag) {
  global $db;
  // count
  $sql = $db->query("SELECT tags FROM tags WHERE tags = '$tag'");
  $sql->execute();
  return $sql->rowcount()
}
// output tags
$tag_arr = [];
foreach($tagname as $tag) {
    $tag_arr[$tag] = count_tags_sql($tag);
}
// Sorted array
asort($tag_arr);

您想使用count,最好如下所示:

SELECT tags,count(*) as usages FROM tags GROUP BY 1 ORDER BY 2 DESC;

使用“按标签分组”中的“按标签顺序”选择计数标签;您需要使用prepare和placeholder,而不是query,才能不使用rowcount。使用SQL count代替。您的答案大约有5处错误,除了您没有解释为什么他们应该使用此代码之外。