2015-05-04 181 views
0

我有3列的数据库表,'mags_sold'显示结果

datename of magazinenumber sold

我每天都会运行一个cronjob,在那天插入3行新的日期,这个杂志的名字和当天销售了多少。 (我有3本杂志)。

我想在表格中显示数据。

我已经设置了4列。 Datemag1,mag2,mag3

我有一个查询SELECT * FROM 'mags_sold',但我不知道如何循环显示它们的结果,所以日期只显示一次,而销售的数字显示在每个标题下。

<?php 
$values = $wpdb->get_results($wpdb->prepare("SELECT * FROM 'mags_sold'")); 
?> 
<table id="email_subscription"> 
<tr> 
<th>Date</th> 
<th>mag1</th> 
<th>mag2</th> 
<th>mag3</th> 
</tr> 
<?php 
foreach($values as $email_signup){ 
$id = $email_signup->id; 
$list_name = array($email_signup->list_name); 
$date = $email_signup->date; 
echo  '<tr><td>' . $date . '</td>'; 
$sold_count = array($email_signup->sold_count); 
     echo '<td>' . $sold_count[0] . '</td>'; 
     echo '<td>' . $sold_count[1] . '</td>'; 
     echo '<td>' . $sold_count[2] . '</td>'; 
echo '</tr>'; 
} 
?> 
</table> 

但是,此代码为每个日期和销售计数显示一个单独的行。

的var_dump使用代码:

array (size=3) 
    0 => 
    object(stdClass)[637] 
     public 'date' => string '2015-05-05' (length=10) 
     public 'B' => string '132467' (length=6) 
     public 'D' => string '2' (length=1) 
     public 'F' => string '15330' (length=5) 
    1 => 
    object(stdClass)[549] 
     public 'date' => string '2015-05-04' (length=10) 
     public 'B' => string '132467' (length=6) 
     public 'D' => string '2' (length=1) 
     public 'F' => string '15330' (length=5) 
    2 => 
    object(stdClass)[547] 
     public 'date' => string '2015-05-03' (length=10) 
     public 'B' => string '132467' (length=6) 
     public 'D' => string '2' (length=1) 
     public 'F' => string '15330' (length=5) 
array (size=3) 
    0 => 
    object(stdClass)[548] 
     public 'date' => string '2015-05-05' (length=10) 
     public 'B' => string '132462' (length=6) 
     public 'D' => string '98577' (length=5) 
     public 'F' => string '15343' (length=5) 
    1 => 
    object(stdClass)[467] 
     public 'date' => string '2015-05-04' (length=10) 
     public 'B' => string '132462' (length=6) 
     public 'D' => string '98577' (length=5) 
     public 'F' => string '15343' (length=5) 
    2 => 
    object(stdClass)[468] 
     public 'date' => string '2015-05-03' (length=10) 
     public 'B' => string '132462' (length=6) 
     public 'D' => string '98577' (length=5) 
     public 'F' => string '15343' (length=5) 
array (size=3) 
    0 => 
    object(stdClass)[547] 
     public 'date' => string '2015-05-05' (length=10) 
     public 'B' => string '132468' (length=6) 
     public 'D' => string '6' (length=1) 
     public 'F' => string '15349' (length=5) 
    1 => 
    object(stdClass)[549] 
     public 'date' => string '2015-05-04' (length=10) 
     public 'B' => string '132468' (length=6) 
     public 'D' => string '6' (length=1) 
     public 'F' => string '15349' (length=5) 
    2 => 
    object(stdClass)[637] 
     public 'date' => string '2015-05-03' (length=10) 
     public 'B' => string '132468' (length=6) 
     public 'D' => string '6' (length=1) 
     public 'F' => string '15349' (length=5) 
+0

我不明白。 'mags_sold'是一个字符串 – Strawberry

+0

你可以在foreach语句下面做一个'$ email_signup'的print_r并发布它吗? – aphextwix

回答

1

你需要的是一个MySQL查询返回的每一个独特的日期下面一行:

date   magazine_1  magazine_2  magazine_3 
2015-04-05 *number_sold* *number_sold* *number_sold* 

那么,number_sold等于计数销售数量name_of_magazine等于magazine_1,2 3等

当前您的查询选择全部从mags_sold表中,然后foreach正在做它应该在它正在返回每一行分开。

见下MYSQL小提琴: -

SQL FIDDLE

SOLUTION

OK,所以你可以试试这个: -

<?php 
$values = $wpdb->get_results($wpdb->prepare("SELECT DISTINCT `date` FROM mags_sold")); 
?> 
<table id="email_subscription"> 
<tr> 
<th>Date</th> 
<th>mag1</th> 
<th>mag2</th> 
<th>mag3</th> 
</tr> 
<?php 

    foreach($values as $email_signup){ 

     $date = $email_signup->date; 

     $sold_values = $wpdb->get_results($wpdb->prepare(
     "SELECT DISTINCT `date`, 
     (select number_sold from mags_sold where name_of_magazine = 'weekly news' AND date = $date) as 'weekly_news', 
     (select number_sold from mags_sold where name_of_magazine = 'monthly news' AND date = $date) as 'monthly_news', 
     (select number_sold from mags_sold where name_of_magazine = 'todays news' AND date = $date) as 'todays_news' 
     from mags_sold 
     WHERE date = $date ")); 

     echo '<tr>'; 
      echo '<td>' . $date . '</td>'; 
      echo '<td>' . $sold_values->weekly_news. '</td>'; 
      echo '<td>' . $sold_values->monthly_news . '</td>'; 
      echo '<td>' . $sold_values->todays_news . '</td>'; 
     echo '</tr>'; 

    } 
?> 
</table> 

更换假杂志的名称,即weekly_news, monthly_news与您的杂志的名称,并应该工作。

+0

谢谢。它给了我正确的数组,但3个相同的数组。还有。 $ sold_values-> todays_news。 '';给我一个白屏。我如何回应结果。 – LTech

+0

@LTech - 您需要用您自己的杂志名称来替换'weekly_news,monthly_news,今天的新闻'。这只是为了说明的目的。请在'foreach'循环中为我提供'$ sold_values'数组的'var_dump'。 – aphextwix

+0

我完全使用了你的代码(显然使得这些更改对应于我的表格)。 var_dump在上面的问题中。当我回应'​​'时没有任何显示。 $计数 - > B。'';我认为foreach循环导致显示数据3次,但是如果我把查询放在循环回声'​​'之外。 $ counts-> Breaking_News_Videos。 '';显示相同的值3倍 – LTech