2016-04-23 52 views
-2

每個表字段都設置爲00 00 00 00 00 00.我試圖找到一個解決方案,按每個列中的00 00 00 00 00 00數字領域。下面的代碼工作正常,但它很醜,我無法訂購結果。謝謝!Mysql ORDER BY COUNT每個列字段上的每個值

期望的結果(實施例)

數 - 100

  • 02 - - 99
  • 03 - 98
  • 列取樣

    它出現在列

    • 01時報

      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(); 
      
      
           } 
      
    +1

    你是說1)'tb'的示例行可能有像'00 00 00 00 01'這樣的值嗎? 2)你想要計算'00','01',..等等的單獨出現次數。在整個桌子? (所以如果我的示例行是唯一的行,輸出將是'00 - > 4
    01 - > 1'? – Terminus

    +0

    不需要。我想計算00或01(以及每個六位數字)出現的次數在列中不是在字段中。謝謝@Terminus – Tom

    +0

    你介意顯示一些示例行(就像3或4)以及這些行的預期輸出嗎?可以在單個查詢中完成此操作,但我需要 – Terminus

    回答

    0

    您可以使用SQL做更多的工作,爲您。您可以將this question的查詢應用於您的情況。

    子查詢將所有數字分解到它們自己的行中。它使用SELECT 1 UNION ALL ... SELECT 6來查找第一個數字,...和第六個數字,並將每個數字放入其自己的行中。 (請注意,因爲每行有6個數字,所以您必須增加到6個,如果您有更多數據,則需要相應地調整查詢。)

    從那裏就可以簡單得知GROUP BY的數字,COUNT() ing唯一出現次數爲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 
    
    0

    更多的東西最好的做法將是,但很難沒有更多的細節,每個告訴你正在尋找:

    $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(); 
    
    +0

    我想要更好的東西來替換這個'for循環'並命令結果。感謝cpu! – Tom

    +0

    循環很好。不要在循環中關閉你的信號,或者放棄準備好的信號的所有好處。取決於你是在尋找一組結果還是隻有一組結果。這個例子僅用於一個(最高計數)。 – cpugourou

    +0

    謝謝,我該如何訂購'數'? – Tom