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

То, что я хочу повторить это Count и Length. Я уверен, что это очень просто, что я пропустил, но не могу понять.

+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' not' 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>'; 
    } 
Смежные вопросы