繁体   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