Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL查询重复结果_Php_Mysql - Fatal编程技术网

Php SQL查询重复结果

Php SQL查询重复结果,php,mysql,Php,Mysql,我有一个存储下载ID、发布ID、文件名和时间戳的表 我要做的是遍历表中的所有行,然后再次遍历,以获得00:00:00和23:59:59之间的匹配日期 这工作正常,并返回所有结果和我的下载计数。 问题是它重复了很多次,因为同一天有多个相同的下载 我不能使用array_unique或多维array_unique函数,因为它们带有时间戳,并且总是显示为唯一的 function download_stats_page_c(){ global $wpdb; $downloads = $wpdb->g

我有一个存储下载ID、发布ID、文件名和时间戳的表

我要做的是遍历表中的所有行,然后再次遍历,以获得00:00:00和23:59:59之间的匹配日期

这工作正常,并返回所有结果和我的下载计数。 问题是它重复了很多次,因为同一天有多个相同的下载

我不能使用array_unique或多维array_unique函数,因为它们带有时间戳,并且总是显示为唯一的

function download_stats_page_c(){
global $wpdb;
$downloads = $wpdb->get_results("SELECT custom_resource_download_log.* FROM custom_resource_download_log"); ?>

<script src="<?php echo get_template_directory_uri(); ?>/library/datatables/media/jquery.dataTables.min.js"></script>
<table id="downloads" class="display" cellspacing="0" width="100%">
    <thead>
        <tr>
            <th>Post</th>
            <th>File</th>
            <th># of Downloads</th>
            <th>Date</th>
        </tr>
    </thead>
    <tbody>
 <?php
foreach ($downloads as $download) {
    $pid = $download->post_id; $file_id = $download->file_id; $time = $download->timestamp;
    $time_str = substr($time, 0, strrpos($time, ' '));
    $date_from = $time_str." 00:00:00";
    $date_to = $time_str." 23:59:59";
    $Q = "SELECT * FROM `custom_resource_download_log` WHERE `timestamp` BETWEEN '$date_from' AND '$date_to' AND `post_id` = '$pid'";
    $results = $wpdb->get_results($Q);
    foreach($results as $result) {
   ?>
    <tr>
        <td>
            <?php echo get_the_title($result->post_id); ?>
        </td>
        <td>
            <?php echo $result->file_name; ?>
        </td>
        <td>
            <?php echo $wpdb->get_var("SELECT COUNT(*) FROM custom_resource_download_log WHERE post_id='$pid' AND file_id='$file_id' AND `timestamp` BETWEEN '$date_from' AND '$date_to'"); ?>
        </td>
        <td>
            <?php echo $time_str; ?>
        </td>
    </tr>
  <?php
    }
}
echo "</tbody></table>";

} 

只需尝试以下查询:

SELECT download_id, post_id, file_name, DATE(timestamp) as the_date, COUNT(*) as number_of_downloads 
FROM custom_resource_download_log
GROUP BY download_id, post_id, file_name, the_date ORDER BY the_date

你为什么要从同一张桌子上取两次?您在第一次查询中获得了所有记录,那么在内部查询中重新提取完全相同的数据有什么意义呢?我认为您可以使用Group By file_id并在一次查询中选择数量,这样您就可以避免第二次循环的内部查询,并且每个文件只显示一行。有人愿意帮助编写该查询吗?我刚开始使用SQL查询,正如您所看到的,我的方法有点粗糙