php - 如何在 ColumnCharts (xField ="date") 上按从 MySQL 获取的日期进行排序?

标签 php mysql apache-flex

我对 Flex 还不太熟悉,我正在使用 Flash Builder 4.5。 我很沮丧..从昨天早上开始就试图解决这个问题,但似乎没有足够的资源来了解有关 Flex 的更多信息!

所以问题是:我有一个带有“日期”数据类型的数据库字段,但我无法通过它来订购 xField!我尝试了很多东西,但没有任何效果......当我尝试通过 id 订购它时,它可以工作,但它不支持日期或其他东西。

这是日期的 php 格式:

      $row->date = new DateTime($row->date);
      $row->date = $row->date->format( "d/m/Y" );

现在的问题是,当我尝试使 xField="date"不显示列时,xField 仍然是 [0 20 40 60 等..]。

我愿意接受新的建议,我不关心我只想在 xField 上显示日期的方式。

请像我说的那样,我对 Flex 还很陌生,所以请让您的答案易于理解。

希望有人能够帮助我,谢谢大家!

编辑:这是整个 FLEX 代码:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx"
               xmlns:fanpagesservice="services.fanpagesservice.*"
               width="914" height="636" minWidth="955" minHeight="600" backgroundColor="#000000"
               creationComplete="application1_creationCompleteHandler(event)">
    <fx:Script>
        <![CDATA[
            import mx.charts.events.ChartItemEvent;
            import mx.collections.ArrayCollection;
            import mx.events.FlexEvent;
            import mx.rpc.events.ResultEvent;
            [Bindable] 
            private var Totals:ArrayCollection = new ArrayCollection;
            [Bindable] 
            private var Likes:ArrayCollection = new ArrayCollection;
            [Bindable]
            public var minDate:Date = new Date(2011, 06, 1);
            [Bindable]
            public var maxDate:Date = new Date(2011, 06, 30);

            protected function ResponcerTotals_resultHandler(event:ResultEvent):void
            {
                // TODO Auto-generated method stub
                Totals = event.result as ArrayCollection;

            }

            protected function application1_creationCompleteHandler(event:FlexEvent):void
            {
                // TODO Auto-generated method stub
                ResponderTotals.token = fanpageService.getAllFanpagesTotals();

            }

            protected function ResponderLikes_resultHandler(event:ResultEvent):void
            {
                // TODO Auto-generated method stub
                Likes = event.result as ArrayCollection;
            }

            protected function totalsPie_itemClickHandler(event:ChartItemEvent):void
            {
                // TODO Auto-generated method stub
                ResponderLikes.token = fanpageService.getAllFanpagesStats(event.hitData.item.page_name);
            }

        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
        <fanpagesservice:FanpagesService id="fanpageService" />
        <s:CallResponder id="ResponderTotals" result="ResponcerTotals_resultHandler(event)" />

        <s:CallResponder id="ResponderLikes" result="ResponderLikes_resultHandler(event)" />
        <mx:SeriesInterpolate id="interpolate" duration="500"/>
    </fx:Declarations>
    <s:Panel x="18" y="9" width="878" height="613" backgroundColor="#262626" chromeColor="#000"
             color="#FFFFFF" contentBackgroundColor="#262626" fontFamily="Arial" fontSize="14"
             skinClass="spark.skins.spark.PanelSkin" textAlign="center">
        <s:layout>
            <s:BasicLayout/>
        </s:layout>
        <mx:PieChart id="totalsPie" x="10" y="10" itemClick="totalsPie_itemClickHandler(event)" dataProvider="{Totals}" showDataTips="true">
            <mx:series>
                <mx:PieSeries displayName="Series 1" field="likes" nameField="page_name" showDataEffect="{interpolate}"/>
            </mx:series>
        </mx:PieChart>
        <mx:Legend x="11" y="414" width="400" dataProvider="{totalsPie}"/>

        <mx:ColumnChart id="columnchart1" x="432" y="10" width="434" dataProvider="{Likes}"
                        showDataTips="true">
            <mx:series>
                <mx:ColumnSeries displayName="serie" yField="likes" xField="date" showDataEffect="{interpolate}"/>
            </mx:series>
        </mx:ColumnChart>
    </s:Panel>
</s:Application>

基本上有一个饼图,当你点击它的一部分时,它需要按日期在柱形图中显示“喜欢”(每天有多少喜欢)。点击部分有效,只是 xField="date"不起作用。

最佳答案

你能做的最简单的事情是什么?在 php 端对其进行排序并将其发送到 Flex,因为考虑到您正在使用向导来创建所有 Flex 代码,您显然对 PHP 的了解比对 Flex 的了解更多。

如果您不想这样做,则需要解析结果,因为您的服务器只是发送字符串作为日期(而不是实际的 Date 对象):

protected function ResponderLikes_resultHandler(event:ResultEvent):void
{
    var array:Array = ArrayCollection(event.result).source;
    // Convert string to date object
    for each(var item:Object in array)
    {
        item.timestamp = DateFormatter.parseDateString(item.date).getTime();
    }
    // Sort array
    array.sortOn('timestamp', Array.NUMERIC);
    // Insert into collection presorted
    Likes = new ArrayCollection(array);
}

应该可以做到这一点,但是您需要对总计进行相同的操作,或者只是创建一个对数据进行解析和排序的函数。

关于php - 如何在 ColumnCharts (xField ="date") 上按从 MySQL 获取的日期进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6389709/

相关文章:

mysql - 函数不会返回从 MySQL 查询(异步/等待)创建的项目数组

apache-flex - Tomcat 和更新的 flex services-config.xml

php - 在数组 var_dump 末尾添加 & 号

javascript - 如何在对象[object HTMLCollection]上插入Mysql数据文本

php - 如何使用 url_for() helper 在 symfony 中获取 url,对于带有路径参数的路由,如 ...../:param

php - MySql AES_DECRYPT 和 AES_ENCRYPT key 在 PHP 中不起作用

java - 如何从 php 文件获取变量并在 Android Activity 中使用它?

flash - 2020 年 12 月之后 Flex/Flash 应用程序会发生什么情况?

java - 在 Java 应用程序中嵌入 Flash UI

javascript - Instagram 风格的帖子标题固定在页面顶部,然后被下一个替换