2015-07-22 121 views
3

我有這個SQL查詢正在運行,因爲它應該運行到phpMyAdmin。從數據庫中選擇計數(*)

SELECT COUNT(*) , LENGTH(Number) AS Numbers 
FROM `history_2015-07-22` 
WHERE Number NOT LIKE '123%' 
OR LENGTH(Number) <50 
GROUP BY Numbers 
ORDER BY TIME = '2015-07-22 00:00:01' ASC 

我現在想要做一個簡單的PHP頁面,在這裏我想顯示在瀏覽器上的查詢結果,但我無法弄清楚如何準確呼應它。所以我做了這個:

$result = $pdo->prepare("SELECT COUNT(*) , LENGTH(Number) AS Numbers 
         FROM `history_2015-07-22` 
         WHERE Number NOT LIKE '123%' 
         OR LENGTH(Number) <50 
         GROUP BY Numbers 
         ORDER BY TIME = '2015-07-22 00:00:01' ASC "); 
$result->execute(); 
foreach ($result as $Numbers) 
{ 
    echo '<div class="container"> 
       '.$Numbers['COUNT(*)'].' 
       '.$Numbers['LENGTH(Number)'].' 
      </div>'; 
} 

我想回聲CountLength。 我敢肯定,這是非常簡單的東西,我想念但無法弄清楚。

+2

'ORDER BY'不使用相同的賦值。閱讀手冊https://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html –

+1

使用別名'COUNT(*)作爲cnt'並在php中使用$ Numbers ['cnt']和$ Numbers ['Numbers']' –

+3

@ Fred-ii-我們可以使用'order by col ='someval''這會將頂部的記錄推送到匹配值。 –

回答

6

首先,您能解釋一下您準備用SQL查詢來做什麼嗎?

據我瞭解,你可以試試這個:

$result = $pdo->prepare("SELECT COUNT(*) AS ct_all, LENGTH(`Number`) AS Numbers 
         FROM `history_2015-07-22` 
         WHERE `Number` NOT LIKE ('123%') 
         AND Numbers < 50 
         GROUP BY Numbers 
         ORDER BY `TIME` ASC"); 
$result->execute(); 
$results = $result->fetchAll(); 
foreach ($results as $row) { 
    echo '<div class="container">'; 
    echo $row['ct_all'] . ' // '; 
    echo $row['Numbers']; 
    echo '</div>'; 
} 
4
$result = $pdo->prepare("SELECT COUNT(*) as cnts, LENGTH(Number) AS num 
         FROM `history_2015-07-22` 
         WHERE Number NOT LIKE '123%' 
         OR LENGTH(Number) <50 
         GROUP BY num 
         ORDER BY TIME = '2015-07-22 00:00:01' ASC "); 
$result->execute(); 
foreach ($result as $Numbers) 
{ 
    echo '<div class="container"> 
       '.$Numbers['cnts'].' 
       '.$Numbers['num'].' 
      </div>'; 
} 
+0

分組應該是'num'而不是'Numbers',並且您是否真的檢查過您建議的代碼? – x3ns

+0

是的..絕對..對不起,錯了.. –

1

看看這裏我已經指出了一些問題。

$result = $pdo->prepare("SELECT COUNT(*) AS ct_all, LENGTH(`Number`) AS Numbers 
         FROM `history_2015-07-22` 
         WHERE `Number` NOT LIKE ('123%') 
         AND Numbers < 50 
         GROUP BY Numbers 
         ORDER BY `TIME` ASC"); 
    $result->execute(); 
    // the problem is.. 
    // you are trying to fetch $result but here $result is just executing 
    // you cannot retrive anything unless you didn't declare it 
    /* here $result has nothing in it; is just executed first 
    * declare it 
    */ 
    $result = $result->execute(); 
    /* Then Fetch it 
    And then You Can Use You Fetch Var with index to retrive data. 
    e.g */ 
    $allData = $result->fetchAll(); 
    foreach ($allData as $SingleData) 
{ 
// here you must place indexes of your Query 
// e.g $SingleData['id'] or $SingleData[0] 
     echo '<div class="container"> 
        '.$SingleData['COUNT(*)'].' 
        '.$SingleData['LENGTH(Number)'].' 
       </div>'; 
    }