Mysql ORDER BY COUNT 每个列字段上的每个值

Mysql ORDER BY COUNT each value on every column field

每个 table 字段都设置为 00 00 00 00 00 00。我正在尝试找到一个解决方案,以通过计算每个列字段中的每个 00 00 00 00 00 00 数字来排序。下面的代码工作正常,但它很难看,我无法订购结果。谢谢!

期望的结果(示例)

数量 - 它在列中出现的次数

列示例

if ($stmt = $post_con->prepare('SELECT asw FROM tb WHERE CONCAT(" ", asw, " ") LIKE CONCAT("% ", ?, " %")')) {


    for($i = 1; $i < 60; $i++){

                $stmt->bind_param("s", $de);
                $de = sprintf('%02d', $i);

                $stmt->execute();
                $stmt->store_result();
                $qty = $stmt->num_rows;

                /* bind result variables */
                $stmt->bind_result($asw);
                $stmt->fetch();

                echo $qty.' -> '.$de.'</br>';

                $stmt->close();


        }   

更多的最佳实践将是但很难说没有更多细节根据您正在寻找的内容:

$stmt = $post_con->prepare('SELECT asw, count(asw) as count FROM tb WHERE CONCAT(" ", asw, " ") LIKE CONCAT("% ", ?, " %") GROUP BY asw ORDER BY count DESC LIMIT 1');
for ($i = 1; $i < 60; $i++) {
    $stmt->bind_param(1, sprintf('%02d', $i));
    $stmt->execute();
    $obj = $stmt->fetchall(PDO::FETCH_ASSOC);
    if (count($obj) !== 0) {
        echo $de . '->' . $obj['count'] . '</br>';
    }
}
$stmt->close();

您可以使用 SQL 为您完成更多工作。您可以将 this question 中的查询应用于您的情况。

子查询将所有数字分成它们自己的行。它使用 SELECT 1 UNION ALL ... SELECT 6 找到第一个数字,...和第 6 个数字,并将每个数字放入自己的行中。 (请注意,您必须增加到 6 个,因为每行有 6 个数字。如果有更多,则必须相应地调整查询。)

从那里开始,就像 GROUP BY 数字一样简单,COUNT() 唯一出现,ORDER BY 数字 ASC 结束顺序。

SELECT num, COUNT(num)
FROM (
  SELECT
    SUBSTRING_INDEX(SUBSTRING_INDEX(tb.asw, ' ', numbers.n), ' ', -1) num
  FROM
    (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
    ) AS numbers
  INNER JOIN tb
    ON CHAR_LENGTH(tb.asw)
       -CHAR_LENGTH(REPLACE(tb.asw, ' ', ''))>=numbers.n-1
) numNumbers
GROUP BY num
ORDER BY num ASC