Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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
Sql 因维护或类似原因而无法使用房间的ns。您可能还希望跟踪此类“不可用”情况,然后返回可用的房间。关于范围的优点。存储预订或可用性是否更有意义取决于对于所讨论的应用程序来说,让用户告诉您他们的公寓何时可用或何时不可用是否更好。选择一个可能对你的用户群来说工作量_Sql_Ruby On Rails_Database_Postgresql_Database Design - Fatal编程技术网

Sql 因维护或类似原因而无法使用房间的ns。您可能还希望跟踪此类“不可用”情况,然后返回可用的房间。关于范围的优点。存储预订或可用性是否更有意义取决于对于所讨论的应用程序来说,让用户告诉您他们的公寓何时可用或何时不可用是否更好。选择一个可能对你的用户群来说工作量

Sql 因维护或类似原因而无法使用房间的ns。您可能还希望跟踪此类“不可用”情况,然后返回可用的房间。关于范围的优点。存储预订或可用性是否更有意义取决于对于所讨论的应用程序来说,让用户告诉您他们的公寓何时可用或何时不可用是否更好。选择一个可能对你的用户群来说工作量,sql,ruby-on-rails,database,postgresql,database-design,Sql,Ruby On Rails,Database,Postgresql,Database Design,因维护或类似原因而无法使用房间的ns。您可能还希望跟踪此类“不可用”情况,然后返回可用的房间。关于范围的优点。存储预订或可用性是否更有意义取决于对于所讨论的应用程序来说,让用户告诉您他们的公寓何时可用或何时不可用是否更好。选择一个可能对你的用户群来说工作量较小的。 class CreateApartments < ActiveRecord::Migration def change create_table :apartments do |t| t.string


因维护或类似原因而无法使用房间的ns。您可能还希望跟踪此类“不可用”情况,然后返回可用的房间。关于范围的优点。存储预订或可用性是否更有意义取决于对于所讨论的应用程序来说,让用户告诉您他们的公寓何时可用或何时不可用是否更好。选择一个可能对你的用户群来说工作量较小的。
class CreateApartments < ActiveRecord::Migration
  def change
    create_table :apartments do |t|
      t.string  :apt_name
      t.integer :apt_owner
      t.text    :apt_description

      Date.today..Date.new(2034, 12, 31)).each do |date|
          t.date :date
      end

      t.timestamps
    end
  end
end
owner
  owner_id
  owner_name

apartment
  apartment_id
  apartment_name
  apartment_description
  owner_id

customer
  customer_id
  customer_name

booking
  booking_id
  customer_id
  apartment_id
  booking_start
  booking_end
booking
  booking_id
  customer_id
  apartment_id

booking_calendar
  booking_id
  booking_date
select
 *
from
 apartments a
 where not exists 
  (select 
     1
   from 
     bookings b 
   where 
      a.apartment_id = b.apartment_id 
      and (
        <<required_start>> between booking_start and booking_end
        or
        <<required_end>> between booking_start and booking_end
        )
CREATE TABLE `listings` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

CREATE TABLE `listing_availabilities` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `listing_id` int(11) NOT NULL,
  `start_time` int(11) NOT NULL,
  `end_time` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `start_time` (`start_time`),
  KEY `end_time` (`end_time`),
  KEY `listing_id` (`listing_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 
> SELECT * FROM `listing_availabilities` WHERE `listing_id` = 716384;
> 365 rows in set (0.01 sec)
> SELECT count(*) as exists FROM `listing_availabilities` 
> WHERE `listing_id` = 1234 
> AND 1481527584 BETWEEN `start_time` AND `end_time`
> LIMIT 1;
> 1 row in set (0.00 sec)
> SELECT * 
> FROM listings AS l 
> LEFT JOIN listing_availabilities a 
>    ON a.listing_id = l.id 
>   AND a.start_time = (SELECT start_time FROM listing_availabilities WHERE l.id = listing_id ORDER BY start_time ASC LIMIT 1) 
> LIMIT 50;
> 50 rows in set (0.05 sec)
> SELECT * 
> FROM listings AS l 
> LEFT JOIN listing_availabilities a 
>    ON  a.listing_id = l.id 
>    AND a.start_time = 
>        (SELECT start_time FROM listing_availabilities WHERE l.id = listing_id AND start_time < 1481536932 AND end_time > 1481536932 LIMIT 1)
> WHERE a.start_time IS NOT NULL 
> LIMIT 50;
> 50 rows in set (0.05 sec)
> SELECT * 
> FROM `listings` AS l 
> LEFT JOIN `listing_availabilities` a 
>    ON  a.listing_id = l.id 
>    AND a.start_time = 
>        (SELECT `start_time` FROM `listing_availabilities` WHERE l.id = listing_id AND `start_time` < 1481530494 AND `end_time` > 1481530494 LIMIT 1)
> WHERE a.start_time IS NOT NULL 
> LIMIT 50;
> Empty set (3.00 sec)
> SELECT l.id, a.start_time, a.end_time 
> FROM listings as l
> LEFT JOIN listing_availabilities a 
>    ON l.id = a.listing_id 
> WHERE 1481530494 
>    BETWEEN a.start_time 
>    AND a.end_time limit 50;
> Empty set (0.01 sec)
> INSERT INTO `listing_availabilities` 
>    (listing_id, start_time, end_time) 
> VALUES 
>    (8, 1481689555, 1481689556) ...
> Query OK, 500 rows affected (0.01 sec)
> Records: 500  Duplicates: 0  Warnings: 0
> DELETE FROM `listing_availabilities` 
> WHERE `end_time` < 1481671237 
> LIMIT 100000;
> Query OK, 100000 rows affected (10.43 sec)
> DELETE FROM `listing_availabilities` 
> WHERE end_time < 1481671237 
> LIMIT 500;
> Query OK, 500 rows affected (0.09 sec)