簡體   English   中英

從PHP中准備好的MySQL語句的結果計算唯一值

[英]Count unique values from the results of a prepared MySQL statement in PHP

我有一個在線日歷,列出即將到來的現場音樂。 我使用准備好的語句來獲取接下來八天的列表並將它們顯示在表格中。 在顯示結果之前,我需要做的是計算列表中唯一日期(“日期”)的數量。 例如,如果接下來八天中只有五天發生事件,那么我需要知道數字是5。

使用COUNT(DISTINCT)可以給我這個數字,但是它只顯示一行結果,所以我需要另一個解決方案

我的代碼是這樣的:

$mysqli = new mysqli("Login Stuff Here");
if ($mysqli->connect_errno){
  echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

$start = strtotime('today midnight');
$stop = strtotime('+1 week');

$start = date('Y-m-d', $start);
$stop = date('Y-m-d', $stop);

$allDates = $mysqli->prepare("SELECT 
    ID,
    Host,
    Type,
    Bands,
    Date,
    Time,
    Price,
    Note,
    Zip,
    URL
    FROM things WHERE (Date >= ? AND Date <= ?) ORDER BY Date, Time, Host");
$allDates->bind_param("ss", $start, $stop);
$allDates->execute();
$allDates->bind_result($ID, $Host, $Type, $Bands, $Date, $Time, $Price, $Note, $Zip, $URL);

while($allDates->fetch()):
  // ECHO ALL THE INFO IN A NICE TABLE
  endwhile;

$allDates->close();

我需要計算“日期”列中的唯一值(甚至可能檢索它們)。 現在,我可以通過執行單獨的查詢來使其正常工作,但是我敢肯定有更好的方法。

編輯:最終,我結束了做一個單獨的查詢,效果很好,因為我也可以將其用於其他事情。 我發現使用GROUP BY在每個日期總是只返回一個結果,因此對於顯示完整列表不起作用。 也許我做錯了,但我最終以另一種方式成為好人。 謝謝!

您缺少分組依據:

GROUP BY Date

要使用任何總計方法(如count,特定組的總和)。 您需要在特定列或列列表上應用GROUP BY

范例:

 GROUP BY Date ORDER BY Date, Time, Host

請注意, SELECT中的列列表必須GROUP BY匹配。

也,

Date >= ? AND Date <= ?

可以替換為

Date BETWEEN ? AND ?

當您從查詢中獲取結果時,建議您按日期分組。

while($row = $allDates->fetch()) {
    $dates[$row['date'][] = $row;
}

這樣可以輕松計算出不同的日期

$count = count($dates);

可能更簡單地格式化輸出(每個日期的標題/節等)。

foreach($dates as $date) {
    foreach($date as $event) {
        // ECHO ALL THE INFO IN A NICE TABLE
    }
}

它確實需要重復兩次相同的數據,但是要使相當數量的數據顯示在頁面上,應該沒有太大的區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM