2015-07-22 113 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>'; 
    }