Php SQL查询重复结果
我有一个存储下载ID、发布ID、文件名和时间戳的表 我要做的是遍历表中的所有行,然后再次遍历,以获得00:00:00和23:59:59之间的匹配日期 这工作正常,并返回所有结果和我的下载计数。 问题是它重复了很多次,因为同一天有多个相同的下载 我不能使用array_unique或多维array_unique函数,因为它们带有时间戳,并且总是显示为唯一的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
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查询,正如您所看到的,我的方法有点粗糙