Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL查询联接_Php_Mysql_Cakephp - Fatal编程技术网

Php MySQL查询联接

Php MySQL查询联接,php,mysql,cakephp,Php,Mysql,Cakephp,我正试图建立一个网站,控制一个出租房的投资组合。站点所有者可以为属性创建列表。该房产每晚有一个默认价格,但也包括设置特殊价格的能力,例如,8月份 然后,站点用户可以进入该站点,输入日期范围并搜索在该时间段内可用的列表。我还需要在那个阶段看看是否有一个特殊的价格来取代默认价格 因此,我的表格如下: listings id default_price etc... bookings id listing_id checkin checkout s

我正试图建立一个网站,控制一个出租房的投资组合。站点所有者可以为属性创建列表。该房产每晚有一个默认价格,但也包括设置特殊价格的能力,例如,8月份

然后,站点用户可以进入该站点,输入日期范围并搜索在该时间段内可用的列表。我还需要在那个阶段看看是否有一个特殊的价格来取代默认价格

因此,我的表格如下:

listings
    id
    default_price
    etc...

bookings 
   id
   listing_id
   checkin
   checkout

special_prices
   id
   listing_id
   from
   to
   price
但是我在sql查询方面毫无用处,我无法计算在输入的时间段内没有预订的列表的查询会是什么样子,如果存在的话,会得到特价

我正在使用cakephp,如果这使查询更容易构建的话。有人能帮我吗

编辑 嘿,伙计们,我现在还在努力弄清楚这一点,我只是在集中精力获取那些没有预订的物品,这些物品与要求的日期冲突,然后我会整理特价物品

目前我有:

$conditions = array(
    "AND" => array(
        "OR" => array(
                    "Listing.address_one LIKE" => "%".$area."%",
                    "Listing.address_two LIKE" => "%".$area."%",
                    "Listing.city LIKE" => "%".$area."%",
                    "Listing.postcode LIKE" => "%".$area."%",
                    "Listing.title LIKE" => "%".$area."%",
                    ),
                    )
                );

$this->Listing->bindModel(array('hasMany' => array('Booking' => array('conditions' =>array('Booking.checkin BETWEEN ? AND ?' => array($to, $from))))));
$data = $this->paginate('Listing', $conditions);
$this->set('data', $data);
这将获得与清单cols中的$area关键字匹配的所有结果,但似乎完全忽略了Bookings表。我试着输入notbetween,看看它是否有所不同,它仍然返回与$area匹配的任何内容,并且似乎忽略了请求日期之间的预订


有人有什么想法吗?

有几种方法可以做到这一点,但加入bookings表并搜索空结果是一种方法。假设签入=预订日期

SELECT 
* 
FROM listings l
LEFT JOIN bookings b ON b.listing_id = l.id AND b.checkin BETWEEN YOUR START DATE AND YOUR_END_DATE
WHERE b.id IS NULL

这是使用相关子查询完成的

SELECT li.id FROM listings li WHERE 
 0=(SELECT COUNT(*) FROM bookings bo WHERE bo.listing_id=li.id
 AND bo.checkin="START DATE" AND bo.checkout="END DATE");

您正在尝试为此创建存储过程吗?