繁体   English   中英

PHP / MySQL:按月分组项目

[英]PHP / MySQL: Group items by month

早上好,

我正在尝试更改网站的日历WordPress插件的输出。 我需要能够按月对项目进行分组。 理想情况下,我将拥有月份和年份,然后是该月份中所有对象的列表。 除了按月和按年分组以外,我一切都很好。

该表的结构如下:

id | event_start | event_end | event_title | event_desc

2 | 1309935600 | 309939200 | 测试 ec ... ......

我是PHP和MySQL的新手,但这是当前正在使用的代码(我没有编写此代码,我已将其修改为自己使用-删除了大多数html / css):

// Add the shortcode for displaying the event on pages
function displayevents( $atts ) {
global $wpdb;
setlocale(LC_ALL, get_locale());
$table_name = $wpdb->prefix . "simple_events";

// VARIATIONS: EXPIRED  /  ALL  /  UPCOMING
if($atts['age']) {
    $age = $atts['age'];
    if($age == "expired") {
        $range = "event_end <= " . time();
    } elseif($age == "all") {
        $range = "event_end > 946706400"; // timestamp for jan 1st 2000 - assuming no event will be creted before that date
    } else {
        $range = "event end > " . time();
    }
}

if($atts['label']) $label = strtolower($atts['label']);
if($atts['limit'] > 0) { $limit = "LIMIT 0, " . $atts['limit']; } else { $limit = ""; }

if( $age && $label ) {
    $allevents = $wpdb->get_results(" SELECT * FROM $table_name WHERE event_label = '$label' AND $range ORDER BY event_start $limit", "ARRAY_A");
} elseif($age) {
    $allevents = $wpdb->get_results(" SELECT * FROM $table_name WHERE $range ORDER BY event_start $limit", "ARRAY_A");
} elseif($label) {
    $currentTime = time();
    $allevents = $wpdb->get_results(" SELECT * FROM $table_name WHERE event_label = '$label' AND event_end >= $currentTime ORDER BY event_start $limit", "ARRAY_A");
} else {
    $currentTime = time();
    $allevents = $wpdb->get_results(" SELECT * FROM $table_name WHERE event_end >= $currentTime ORDER BY event_start $limit", "ARRAY_A");
}

foreach ($allevents as $event) {
    // decide if the year needs to be mentioned
    if(date('Y',$event['event_start']) == date('Y',time())) {
        $eventtime = strftime( __('%l:%M',SE_TEXTDOMAIN),$event['event_start']);
    } else {
        $eventtime = strftime( __('%l:%M',SE_TEXTDOMAIN),$event['event_start']);
    }

    $the_events[] =  
    strftime( __('%d',SE_TEXTDOMAIN),$event['event_end']).
    stripslashes($event['event_title']).

    stripslashes($event['event_desc']).

    $eventtime.
    ' to '.
    strftime( __('%l:%M',SE_TEXTDOMAIN),$event['event_end']).       

    $evt_loc.
    $evt_url;
} // end foreach ($allevents as $event)

$items = implode($the_events);
return($items);
}

任何帮助将不胜感激。 当前输出可以在这里看到: http : //nwtechanddesign.com/jariccodance/calendar/

所需的输出(分开显示)可以在此处找到: http : //nwtechanddesign.com/wp-content/blogs.dir/11/calendar.jpg

TIA

我不确定100%是否对返回的字符串在做什么,所以我不能真正以只能插入的方式回答问题,但是鉴于从内爆数组创建一些大字符串,我想您只是想知道如何在正确的位置放置标头。

假设您的数组排序正确,根据查询,它看起来应该按顺序排列,您可以执行以下操作:

$curMonth = "";
$curYear = "";

foreach($allEvents as $event)
{
    // If we encounter a new month or year, change our curMonth/curYear values
    // and output a new header.
    if ((date('Y',$event['event_start']) != $curYear) || (date('M',$event['event_start']) != $curMonth))
    {
        $curMonth = date('M',$event['event_start']);
        $curYear = date('Y',$event['event_start']);

        // Outputs in 'Jan.2011' style
        // You'll just have to deal with this somehow, like you deal with the rest of the stuff
        $eventString = $curMonth.".".$curYear;
    }
    else
        $eventString = "";

    // Then instead of:
    // $the_events[] = 
    // use
    $eventString .=

    ... rest of your code ...

    $the_events[] = $eventString;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM