合并两个表并水平输出日期PHPExcel

合并两个表并水平输出日期PHPExcel,php,mysql,codeigniter,phpexcel,Php,Mysql,Codeigniter,Phpexcel,我的第一张表列表\u信息 list_id | list_name | list_link | list_extrafee | list_reviews ------------------------------------------------------------------------ 4852 | List One | /list1 | $4 after 3 guests | 56 4853 | List Two

我的第一张表
列表\u信息

list_id | list_name   |   list_link  |    list_extrafee     | list_reviews
------------------------------------------------------------------------
 4852   |  List One   |    /list1    |   $4 after 3 guests  |    56
 4853   |  List Two   |    /list2    |   $10 after 5 guests |     42
 4854   |  List Three |    /list3    |   $40 after 8 guests |     32
 4855   |  List Four  |    /list4    |         FREE         |    14
第二张表<代码>价格清单

list_id  |  dates        | list_price  | list_avilable
------------------------------------------------------
4852     | 4/12/2015     |     55      |     TRUE
4852     | 5/12/2015     |     56      |     TRUE
4852     | 6/12/2015     |     89      |     TRUE
4852     | 7/12/2015     |     110     |     TRUE
4852     | 8/12/2015     |     150     |     TRUE
4852     | 9/12/2015     |     110     |     TRUE
4852     | 10/12/2015    |     110     |     TRUE
4852     | 11/12/2015    |     150     |     TRUE
4852     | 12/12/2015    |     110     |     TRUE
4853     | 4/12/2015     |     160     |     TRUE
4853     | 5/12/2015     |     140     |     FALSE
4853     | 6/12/2015     |     55      |     FALSE
4853     | 7/12/2015     |     56      |     FALSE
4853     | 8/12/2015     |     89      |     FALSE
4853     | 9/12/2015     |     110     |     FALSE
4853     | 10/12/2015    |     150     |     FALSE
4853     | 11/12/2015    |     110     |     FALSE
4853     | 12/12/2015    |     110     |     FALSE
4854     | 4/12/2015     |     150     |     TRUE
4854     | 5/12/2015     |     110     |     TRUE
4854     | 6/12/2015     |     160     |     TRUE
4854     | 7/12/2015     |     140     |     TRUE
4854     | 8/12/2015     |     160     |     TRUE
4854     | 9/12/2015     |     180     |     TRUE
4854     | 10/12/2015    |     110     |     TRUE
4854     | 11/12/2015    |     110     |     TRUE
4854     | 12/12/2015    |     50      |     TRUE
4855     | 4/12/2015     |     50      |     TRUE
4855     | 5/12/2015     |     48      |     TRUE
4855     | 6/12/2015     |     60      |     TRUE
4855     | 7/12/2015     |     70      |     TRUE
4855     | 8/12/2015     |     65      |     TRUE
4855     | 9/12/2015     |     90      |     TRUE
4855     | 10/12/2015    |     80      |     TRUE
4855     | 11/12/2015    |     70      |     TRUE
4855     | 12/12/2015    |     60      |     TRUE
我试图实现的是:

到目前为止,我只设法将其中一个表放入一个数组中,并使用
$objPHPExcel->getActiveSheet()->fromArray()传递它功能,代码:

public function scrape()
{
    /** Error reporting */
    error_reporting(E_ALL);

    /** Include path **/
    ini_set('include_path', ini_get('include_path').';../Classes/');

    /** PHPExcel */
    include 'PHPExcel.php';

    /** PHPExcel_Writer_Excel2007 */
    include 'PHPExcel/Writer/Excel2007.php';// Create new PHPExcel object
    $objPHPExcel = new PHPExcel();
    // Set properties
    $objPHPExcel->getProperties()->setCreator("AB")
        ->setLastModifiedBy("AB")
        ->setTitle("Office 2007 XLSX Test Document")
        ->setSubject("Office 2007 XLSX Test Document")
        ->setDescription("AB document for Office 2007 XLSX, generated using PHP classes.")
        ->setKeywords("office 2007 openxml php")
        ->setCategory("AB result file");
    // Add some data

    $q = $this->db->select('*')->from('list_info')->get();
    $sheet=$q->result_array();


    $objPHPExcel->getActiveSheet()->fromArray($sheet);


    // Rename sheet
    $objPHPExcel->getActiveSheet()->setTitle('AB Result '.date('d-m-Y').'');
    // Set active sheet index to the first sheet, so Excel opens this as the first sheet
    $objPHPExcel->setActiveSheetIndex(0);
    // Redirect output to a clients web browser (Excel5)
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="01simple.xls"');
    header('Cache-Control: max-age=0');
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('php://output');
    exit;
}
我需要帮助将这两个表合并成一个数组,该数组适合生成我上传的示例excel文件

索姆纳特·穆鲁克回答中的错误 SQL查询:

从@sql准备stmt

MySQL说:文档

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM `list_info` l JOIN list_price p ON l.list_id = p.list_id
      ' at line 15 
长工作代码:

SELECT l.*,
   MAX( CASE
        WHEN p.list_date = "2015-11-29" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-11-29" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-11-29`,
   MAX( CASE
        WHEN p.list_date = "2015-11-30" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-11-30" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-11-30`,
   MAX( CASE
        WHEN p.list_date = "2015-12-01" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-01" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-01`,
   MAX( CASE
        WHEN p.list_date = "2015-12-02" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-02" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-02`,
   MAX( CASE
        WHEN p.list_date = "2015-12-03" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-03" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-03`,
   MAX( CASE
        WHEN p.list_date = "2015-12-04" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-04" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-04`,
   MAX( CASE
        WHEN p.list_date = "2015-12-05" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-05" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-05`,
   MAX( CASE
        WHEN p.list_date = "2015-12-06" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-06" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-06`,
   MAX( CASE
        WHEN p.list_date = "2015-12-07" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-07" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-07`,
   MAX( CASE
        WHEN p.list_date = "2015-12-08" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-08" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-08`,
   MAX( CASE
        WHEN p.list_date = "2015-12-09" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-09" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-09`,
   MAX( CASE
        WHEN p.list_date = "2015-12-10" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-10" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-10`,
   MAX( CASE
        WHEN p.list_date = "2015-12-11" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-11" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-11`,
   MAX( CASE
        WHEN p.list_date = "2015-12-12" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-12" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-12`,
   MAX( CASE
        WHEN p.list_date = "2015-12-13" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-13" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-13`,

   MAX( CASE
        WHEN p.list_date = "2015-12-14" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-14" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-14`,
   MAX( CASE
        WHEN p.list_date = "2015-12-15" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-15" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-15`,
   MAX( CASE
        WHEN p.list_date = "2015-12-16" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-16" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-16`,
   MAX( CASE
        WHEN p.list_date = "2015-12-17" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-17" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-17`,
   MAX( CASE
        WHEN p.list_date = "2015-12-18" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-18" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-18`,
   MAX( CASE
        WHEN p.list_date = "2015-12-19" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-19" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-19`,
   MAX( CASE
        WHEN p.list_date = "2015-12-20" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-20" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-20`,
   MAX( CASE
        WHEN p.list_date = "2015-12-21" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-21" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-21`,
   MAX( CASE
        WHEN p.list_date = "2015-12-22" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-22" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-22`,
   MAX( CASE
        WHEN p.list_date = "2015-12-23" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-23" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-23`,
   MAX( CASE
        WHEN p.list_date = "2015-12-24" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-24" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-24`,
   MAX( CASE
        WHEN p.list_date = "2015-12-25" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-25" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-25`,
   MAX( CASE
        WHEN p.list_date = "2015-12-26" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-26" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-26`,
   MAX( CASE
        WHEN p.list_date = "2015-12-27" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-27" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-27`,
   MAX( CASE
        WHEN p.list_date = "2015-12-28" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-28" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-28`,
   MAX( CASE
        WHEN p.list_date = "2015-12-29" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-29" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-29`,
   MAX( CASE
        WHEN p.list_date = "2015-12-30" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-30" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-30`,
   MAX( CASE
        WHEN p.list_date = "2015-12-31" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2015-12-31" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2015-12-31`,
   MAX( CASE
        WHEN p.list_date = "2016-01-01" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-01" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-01`,
   MAX( CASE
        WHEN p.list_date = "2016-01-02" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-02" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-02`,
   MAX( CASE
        WHEN p.list_date = "2016-01-03" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-03" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-03`,
   MAX( CASE
        WHEN p.list_date = "2016-01-04" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-04" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-04`,
   MAX( CASE
        WHEN p.list_date = "2016-01-05" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-05" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-05`,
   MAX( CASE
        WHEN p.list_date = "2016-01-06" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-06" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-06`,
   MAX( CASE
        WHEN p.list_date = "2016-01-07" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-07" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-07`,
   MAX( CASE
        WHEN p.list_date = "2016-01-08" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-08" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-08`,
   MAX( CASE
        WHEN p.list_date = "2016-01-09" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-09" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-09`,
   MAX( CASE
        WHEN p.list_date = "2016-01-10" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-10" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-10`,
   MAX( CASE
        WHEN p.list_date = "2016-01-11" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-11" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-11`,
   MAX( CASE
        WHEN p.list_date = "2016-01-12" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-12" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-12`,
   MAX( CASE
        WHEN p.list_date = "2016-01-13" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-13" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-13`,
   MAX( CASE
        WHEN p.list_date = "2016-01-14" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-14" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-14`,
   MAX( CASE
        WHEN p.list_date = "2016-01-15" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-15" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-15`,
   MAX( CASE
        WHEN p.list_date = "2016-01-16" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-16" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-16`,
   MAX( CASE
        WHEN p.list_date = "2016-01-17" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-17" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-17`,
   MAX( CASE
        WHEN p.list_date = "2016-01-18" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-18" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-18`,
   MAX( CASE
        WHEN p.list_date = "2016-01-19" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-19" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-19`,
   MAX( CASE
        WHEN p.list_date = "2016-01-20" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-20" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-20`,
   MAX( CASE
        WHEN p.list_date = "2016-01-21" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-21" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-21`,
   MAX( CASE
        WHEN p.list_date = "2016-01-22" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-01-22" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-01-22`,
   MAX( CASE
        WHEN p.list_date = "2016-01-23" and p.list_available = "TRUE" THEN p.list_price
        ELSE NULL END) `2016-05-21`,
   MAX( CASE
        WHEN p.list_date = "2016-05-22" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-05-22" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-05-22`,
   MAX( CASE
        WHEN p.list_date = "2016-05-23" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-05-23" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-05-23`,
   MAX( CASE
        WHEN p.list_date = "2016-05-24" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-05-24" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-05-24`,
   MAX( CASE
        WHEN p.list_date = "2016-05-25" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-05-25" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-05-25`,
   MAX( CASE
        WHEN p.list_date = "2016-05-26" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-05-26" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-05-26`,
   MAX( CASE
        WHEN p.list_date = "2016-05-27" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-05-27" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-05-27`,
   MAX( CASE
        WHEN p.list_date = "2016-05-28" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-05-28" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-05-28`,
   MAX( CASE
        WHEN p.list_date = "2016-05-29" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-05-29" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-05-29`,
   MAX( CASE
        WHEN p.list_date = "2016-05-30" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-05-30" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-05-30`,
   MAX( CASE
        WHEN p.list_date = "2016-05-31" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-05-31" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-05-31`,
   MAX( CASE
        WHEN p.list_date = "2016-06-01" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-06-01" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-06-01`,
   MAX( CASE
        WHEN p.list_date = "2016-06-02" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-06-02" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-06-02`,
   MAX( CASE
        WHEN p.list_date = "2016-06-03" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-06-03" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-06-03`,
   MAX( CASE
        WHEN p.list_date = "2016-06-04" and p.list_available = "TRUE" THEN p.list_price
        WHEN p.list_date = "2016-06-04" and p.list_available = "FALSE" THEN CONCAT( p.list_price , ' FALSE')
        ELSE NULL END) `2016-06-04`
FROM `airbnb_lists` l JOIN airbnb_lists_price p ON l.list_id = p.list_id
GROUP   BY l.list_id
我已经为您创建了&并且在表中只添加了一些虚拟数据

您需要从价目表中找出不同的日期

如果您需要价目表中的动态列,则可以运行以下查询:

SELECT GROUP_CONCAT(DISTINCT
    CONCAT('MAX( CASE
            WHEN p.dates = "', dates,'" and p.list_avilable = "TRUE" THEN p.list_price 
            WHEN p.dates = "', dates,'" and p.list_avilable = "FALSE" THEN CONCAT( p.list_price , " FALSE") 
            ELSE NULL END) as `', dates,'`
           ' )
    )
FROM list_price
这将为您提供动态列:

  MAX( CASE
       WHEN p.dates = "4/12/2015" and p.list_avilable = "TRUE" THEN p.list_price 
       WHEN p.dates = "4/12/2015" and p.list_avilable = "FALSE" THEN CONCAT( p.list_price , " FALSE") 
       ELSE NULL END) as `4/12/2015`,
  MAX( CASE
       WHEN p.dates = "5/12/2015" and p.list_avilable = "TRUE" THEN p.list_price 
       WHEN p.dates = "5/12/2015" and p.list_avilable = "FALSE" THEN CONCAT( p.list_price , " FALSE") 
       ELSE NULL END) as `5/12/2015`
需要进行如下查询

// $columns will have result of first query.
$query= "SELECT l.*,
          ".$columns."
          FROM `list_info` l JOIN list_price p ON l.list_id = p.list_id
         GROUP BY l.list_id";
您的查询将是这样的

SELECT l.*,
       MAX( CASE
            WHEN p.dates = "4/12/2015" and p.list_avilable = "TRUE" THEN p.list_price 
            WHEN p.dates = "4/12/2015" and p.list_avilable = "FALSE" THEN CONCAT( p.list_price , ' FALSE') 
            ELSE NULL END) `4/12/2015`,
       MAX( CASE 
            WHEN p.dates = "5/12/2015" and p.list_avilable = "TRUE" THEN p.list_price 
            WHEN p.dates = "5/12/2015" and p.list_avilable = "FALSE" THEN CONCAT( p.list_price , ' FALSE') 
            ELSE NULL END) `5/12/2015`
    FROM `list_info` l JOIN list_price p ON l.list_id = p.list_id
    GROUP   BY l.list_id
我能够找到如下结果:

更新: 您可以将两个sql查询合并为一个查询。您只需要替换
$q=$this->db->select('*')->from('list_info')->get()使用以下原始查询语句执行此操作

SET @sql= '';
SELECT GROUP_CONCAT(DISTINCT
                    CONCAT('MAX( CASE
                           WHEN p.dates = "', dates,'" and p.list_avilable = "TRUE" THEN p.list_price 
                           WHEN p.dates = "', dates,'" and p.list_avilable = "FALSE" THEN CONCAT( p.list_price , " FALSE") 
                           ELSE NULL END) as `', dates,'`
                           ' )
                   ) INTO @sql
FROM list_price;


SET @sql = CONCAT('SELECT l.*, ', @sql, ' 
                  FROM `list_info` l JOIN list_price p ON l.list_id = p.list_id
                  GROUP   BY l.list_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;

PHPMyadmin中此查询存在一些问题。只显示行数。检查您是否在PHP中获得结果。

在使用SELECT子句获取结果时,使用join连接两个表。这样您可以获得所需的结果。@鸣人我知道这一点,但我正在尝试为带有价格的日期获取特定的水平布局。然而,这可能是我正在寻找的。我如何选择所有的日期并将它们连接起来?@IlanHasanov:我已经更新了答案,以便动态获取列并将其放入您的最终输出查询中。我的列表中有大约189000条记录,所以我需要某种方法来选择并连接所有内容:)不确定如何组合这两个查询?您能帮我用PHP包装这些查询吗Please@IlanHasanov:我已使用组合查询再次更新。谢谢
SET @sql= '';
SELECT GROUP_CONCAT(DISTINCT
                    CONCAT('MAX( CASE
                           WHEN p.dates = "', dates,'" and p.list_avilable = "TRUE" THEN p.list_price 
                           WHEN p.dates = "', dates,'" and p.list_avilable = "FALSE" THEN CONCAT( p.list_price , " FALSE") 
                           ELSE NULL END) as `', dates,'`
                           ' )
                   ) INTO @sql
FROM list_price;


SET @sql = CONCAT('SELECT l.*, ', @sql, ' 
                  FROM `list_info` l JOIN list_price p ON l.list_id = p.list_id
                  GROUP   BY l.list_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;