2013-02-15 31 views
0

我遇到问题,找不到任何解决方案。 我有一个数据库,从那里我选择了很多信息,并计算这些数据。在PHP中使用格式化数字对数据表进行排序

$table->td(    
      array($row->mailing_id, "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
      array($row->mailing_unique_id, "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
      array($row->mailing_name, "width=\"300\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
      array($row->campaign_id, "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
      array($row->segment_name, "width=\"100\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
      array($row->total_sent, "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
      array(@$viewSum[$row->mailing_unique_id], "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
      array(@number_format((@$viewSum[$row->mailing_unique_id] * 100)/$row->total_sent, 2, '.', '.').'%', "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
      array(number_format(@$leadssum[$row->mailing_unique_id],0, '.', '.'), "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
      array(@number_format((@$leadssum[$row->mailing_unique_id]*100)/$row->total_sent,2, '.', '.').'%', "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
      array(@number_format((@$leadssum[$row->mailing_unique_id] * 100)/@$viewSum[$row->mailing_unique_id], 2, '.', '.').'%', "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
      array(number_format(@$crossviewSum[$row->mailing_unique_id],0, '.', '.'), "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
      array(number_format(@$crossleadsSum[$row->mailing_unique_id],0, '.', '.'), "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
      array(@number_format((@$crossleadsSum[$row->mailing_unique_id] * 100)/@$crossviewSum[$row->mailing_unique_id], 2, '.', '.').'%', "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
      array(@number_format(((@$leadssum[$row->mailing_unique_id][email protected]$crossleadsSum[$row->mailing_unique_id])/$row->total_sent)*100, 2, '.', '.').'%', "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\"") 
      ); 

但是当我在DataTables中显示所有数据时,排序是不对的。表认为1.800小于999,但它是成千上万的分离器。数据会是这样的:

999 
888 
5.656 
4.655 
322 
2.333 
122 

编辑-----------------

这是主要的查询:

$query = sprintf(" 
      SELECT stat_mailings.mailing_id, stat_mailings.cat_id, stat_mailings.mailing_name, stat_mailings.mailing_unique_id, stat_mailings.segment_id, 
      stat_mailings.campaign_id, stat_mailings.landing_page, stat_mailings.total_sent, pecumail_segments.segment_name, categories.category FROM `stat_mailings` 
      JOIN pecumail_segments ON stat_mailings.segment_id=pecumail_segments.segment_id 
      JOIN categories ON stat_mailings.cat_id=categories.id  

这是我的代码,在那里我打印的所有数据:

$table = new datatable("100%", "border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"margin-left: auto;margin-right: auto;margin-left: -135px;\""); 

    $table->th("Mailing ID", "Unique id", "Mailing", "UTM campaign", "Segment", "Vezonden", "Views", "CTR", "Leads", "STL","Conversie", "Crossviews", "Crossleads","Crossconv","STLa"); 


    $analyzedata = getAnalyze(); 
    $leads = getLeads(); 
    $views = getViews(); 
    $crossviews = getCrossViews(); 
    $crossleads = getCrossLeads(); 



     while ($row1 = $leads->fetch_object()) { 
     $leadsData = count($row1->pema_mid);   
     @$leadssum[$row1->pema_mid] += $leadsData; 
     } 

     while ($row2 = $views->fetch_object()) { 
     $countedViews = count($row2->pema_mid);   
     @$viewSum[$row2->pema_mid] += $countedViews; 
     } 

     while ($row3 = $crossviews->fetch_object()) { 
     $countedCrossViews = count($row3->pema_mid);   
     @$crossviewSum[$row3->pema_mid] += $countedCrossViews; 
     } 

     while ($row4 = $crossleads->fetch_object()) { 
     $countedCrossLeads = count($row4->pema_mid);   
     @$crossleadsSum[$row4->pema_mid] += $countedCrossLeads; 
     } 


     while($row = $analyzedata->fetch_object()){ 


      $totalSent = number_format($row->total_sent, 0, '.', '.'); 

     $table->td(    
       array($row->mailing_id, "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
       array($row->mailing_unique_id, "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
       array($row->mailing_name, "width=\"300\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
       array($row->campaign_id, "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
       array($row->segment_name, "width=\"100\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
       array($totalSent, "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
       array(number_format(@$viewSum[$row->mailing_unique_id],0, '.', '.'), "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
       array(@number_format((@$viewSum[$row->mailing_unique_id] * 100)/$row->total_sent, 2, '.', '.').'%', "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
       array(number_format(@$leadssum[$row->mailing_unique_id],0, '.', '.'), "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
       array(@number_format((@$leadssum[$row->mailing_unique_id]*100)/$row->total_sent,2, '.', '.').'%', "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
       array(@number_format((@$leadssum[$row->mailing_unique_id] * 100)/@$viewSum[$row->mailing_unique_id], 2, '.', '.').'%', "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
       array(number_format(@$crossviewSum[$row->mailing_unique_id],0, '.', '.'), "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
       array(number_format(@$crossleadsSum[$row->mailing_unique_id],0, '.', '.'), "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
       array(@number_format((@$crossleadsSum[$row->mailing_unique_id] * 100)/@$crossviewSum[$row->mailing_unique_id], 2, '.', '.').'%', "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\""), 
       array(@number_format(((@$leadssum[$row->mailing_unique_id][email protected]$crossleadsSum[$row->mailing_unique_id])/$row->total_sent)*100, 2, '.', '.').'%', "width=\"20\" style=\" border-bottom-width: 1px; border-bottom-style: solid;\"") 
       ); 

} 


    echo $html = $table->getHTML(); 

,这是我的DataTable脚本

$(document).ready(function() { 
$('#example').dataTable({ 
    "aoColumns": [ 
     null, 
     null, 
     null, 
     { "sType": "numeric-comma" }, 
     { "sType": "numeric-comma" }, 
     { "sType": "string" }, 
     { "sType": "formated-num" }, 
     { "sType": "percent" }, 
     { "sType": "numeric-comma" }, 
     { "sType": "percent" }, 
     { "sType": "percent" }, 
     { "sType": "numeric-comma" }, 
     { "sType": "percent" }, 
     { "sType": "percent" }, 
     null 
    ] 
}); 

});

+0

您必须将实际值存储在单独的字段中才能排序论文 – djleop 2013-02-15 09:12:27

+0

为什么要隐藏所有错误?这是一个糟糕的设计。 – 2013-02-15 09:15:54

+0

实际上是5.656数据库中的值?还是你把它转换成那个?换句话说,表中的值是什么? – djjjuk 2013-02-15 09:20:32

回答

1

你将不得不从数据库中排序。看看你的代码,

while ($row1 = $leads->fetch_object()) { } 

看起来像它一次抓取表1中的一个对象或行。如果这样做,那么以后就无法对其进行分类。你要么必须从数据库中对它进行排序,要么从具有fetch_object()函数的类中对它进行排序 - 据推测这将循环遍历结果并将它们创建为对象?如果这个类碰巧是一个Iterator实现,那么您只能将它从数据库中排序为一个选项。

唯一你可以在PHP中排序的方法是将值作为你的键并按键对数组进行排序 - 但显然,如果你有两个或更多的值,它们会覆盖每个值其他。

相关问题