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

时间:2016-04-23 00:42:06

标签: php mysql sql-order-by

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

期望的结果(例子)

数字 - 它出现在列

中的时间
  • 01 - 100
  • 02 - 99
  • 03 - 98

栏目样本

enter image description here

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();


        }   

2 个答案:

答案 0 :(得分:0)

根据您所寻找的内容,如果没有更多细节,那么更多的最佳实践将很难分辨出来:

 $mysqli->query('select * from afusers where username ="' . $username . '"')

答案 1 :(得分:0)

您可以使用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