我如何订购两个foreach?

时间:2015-03-16 18:20:55

标签: php

我正在做类似系统通知的事情。我想按日期对这两个foreach中的数据进行排序,但我不知道如何。请帮帮我。

我有这段代码:

        $view_like_product=$this->db->query("SELECT lp.`product_id`, lp.`date`, lp.customer_id FROM `like_product` as lp, `supplier_products` as sp WHERE sp.`product_id` = lp.`product_id` AND sp.`supplier_id`=".$customer_id." ORDER BY lp.`date` desc")->result();

        $view_like_supplier=$this->db->query("SELECT DISTINCT ls.`customer_id`,ls.`date` FROM `like_supplier` as ls, `supplier_products` as sp WHERE sp.`supplier_id`=".$customer_id." AND sp.`product_id` = ls.`product_id`")->result();

        $i=1;               
        foreach($view_like_product as $items){ 

                        //Limit
                        if($i==4) break;

        $product=$this->db->query("SELECT p.`product_name`,pi.`product_image` FROM `supplier_products` as p,`supplier_product_images` as pi WHERE pi.`product_id`=p.`product_id` AND p.`product_id` ='".$items->product_id."' GROUP BY pi.`product_id` ")->row();   
        $supplier=$this->db->query("SELECT c.`customer_id`,c.`first_name`,c.`last_name`,c.`company_name`,c.`company_pic` FROM `customers` as c, `like_supplier` as ls WHERE c.`customer_id`='".$items->customer_id."'")->row();
        ?>

        <div class="ui">
            <table border="1">
            <tr>
            <td style="font:normal 12px Arial !important;"><img src="<?php echo base_url(); ?>company_pic/<?php echo  $supplier->company_pic; ?>" height="40" width="40" /></td>
            <td style="font:normal 12px Arial !important;"><?php echo $supplier->company_name; ?>&nbsp;</td>
            <td>has liked :</td>
            <td style="font:normal 12px Arial !important;">&nbsp;<?php echo $product->product_name; ?></td>
            <td><img src="<?php echo base_url(); ?>supplier_products/<?php echo $product->product_image; ?>" height="40" width="40" /></td>
            <td style="font:normal 12px Arial !important;"><?php echo $items->date; ?></td></tr></table>
        </div>
        <?php $i++; } ?>

        <!-- Notif Like Supplier -->
        <?php   

        $i=1; 

        foreach($view_like_supplier as $items){ 

            //Limit
            if($i==4) break;

        $supplier=$this->db->query("SELECT `customer_id`,`first_name`,`last_name`,`company_name`,`company_pic` FROM `customers` WHERE `customer_id`=".$customer_id."")->row();
        $supplier_has=$this->db->query("SELECT c.`customer_id`,c.`first_name`,c.`last_name`,c.`company_name`,c.`company_pic` FROM `customers` as c, `like_supplier` as ls WHERE c.`customer_id`=".$items->customer_id."")->row();
        ?>
        <div class="ui">
            <table border="1">
            <tr>
            <td style="font:normal 12px Arial !important;"><img src="<?php echo base_url(); ?>company_pic/<?php echo  $supplier_has->company_pic; ?>" height="40" width="40" /></td>
            <td style="font:normal 12px Arial !important;"><?php echo $supplier_has->company_name; ?>&nbsp;</td>
            <td>has liked :</td>
            <td style="font:normal 12px Arial !important;">&nbsp;<?php echo $supplier->company_name; ?></td>
            <td><img src="<?php echo base_url(); ?>company_pic/<?php echo $supplier->company_pic; ?>" height="40" width="40" /></td>
            <td style="font:normal 12px Arial !important;"><?php echo $items->date; ?></td></tr></table>
        </div>
    <?php $i++; }?>     

2 个答案:

答案 0 :(得分:0)

通过附加ORDER BY子句来更改第二个查询:

$view_like_supplier=$this->db->query("SELECT DISTINCT ls.customer_id,ls.date 
   FROM like_supplier as ls, supplier_products as sp 
    WHERE sp.supplier_id=".$customer_id." 
    AND sp.product_id = ls.product_id
    ORDER BY ls.date")->result();

答案 1 :(得分:0)

您尝试做的事情可以通过UNION完成,但需要了解您的目标。我举一个简单的例子:

表X包含列A(varchar),B(整数)和C(日期)。 表Y包含M(varchar),N(浮点)和C(日期)列。

您希望混合2个表中的行,按C排序。

SELECT 'X' as src, C, A, B, '' as M, 0.0 as N
FROM X
UNION
SELECT 'Y', '', 0, C, M, N
FROM Y
ORDER BY C

现在,您生成的查询将包含以下列:

  • src - X或Y,具体取决于它来自哪个表
  • C - 日期字段按
  • 排序
  • A
  • 中号
  • Ñ

行将在2个表之间混合,并由C列排序。

现在当你处理它时,你会做这样的事情:

while ($row = fetch()) {
    if ($row['src'] == 'X')
        echo "$row[C]: $row[A] $row[B]<br />\n";
    else // coming from Y table
        echo "$row[C]: $row[M] $row[N]<br />\n";
}