根据开始日期和结束日期PHP从DB中排除结果

时间:2016-05-17 07:56:36

标签: php android codeigniter

Array ( [0] => Array ( 
                   [reservationid] => KHAN2016Q221
                   [startdate] => 2016-05-16 
                   [enddate] => 2016-05-21 
                     ) 
        [1] => Array ( 
                   [reservationid] => KHAN2016Q222
                   [startdate] => 2016-05-18 
                   [enddate] => 2016-05-23 
                     ) 
        [2] => Array (
                   [reservationid] => KHAN2016Q223 
                   [startdate] => 2016-05-19
                   [enddate] => 2016-05-21 
                     ) 
        [3] => Array ( [reservationid] => KHAN2016Q224 
                   [startdate] => 2016-05-23 
                   [enddate] => 2016-05-27 
                     ) 
     )

我将提供startdateenddate,并且我想返回reservationid,其中不包括预订的日期。请帮助我。

2 个答案:

答案 0 :(得分:0)

<强>您好,

我想,这取决于您使用的数据库中的日期格式。 我用AMADEUS API(Travelport)预订任务做了一些事情。通常以非常简单的形式表示:

SELECT * 来自xxxxxxx 在哪里:MyDate BETWEEN StartDate和EndDate

根据数据库,您还必须添加:

AND EndDate&gt; = StartDate

但是你必须检查数据库的日期格式和编码。

也许答案太简单但是你知道它取决于许多系统特定的参数,你还没有列出。

好的 - 我读了你的修正案1 我还没有使用CodeIgniter。但首先 - 您使用的数据库是什么?好吧,我在CodeIgniter中看到 - 它是MySQL并且通常使用UTF-8 - 但是如果它一般设置如下,请查看配置内部:

$db['default'] = array(
        'dsn'   => '',
        'hostname' => 'localhost',
        'username' => 'xxxxx',
        'password' => 'xxxxx',
        'database' => 'xxxxx',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => TRUE,
        'db_debug' => TRUE,
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array()
);

查看数据库并查看为startdate和enddate分配的字段类型。我想这是DATETIME的预订目的,你需要它几秒钟。我想要获取相应的ID,我们需要一些JOIN,我们可以在CodeIgniter的Query Builder类中找到它们。我们将进一步了解。我刚看到标签android - 这是用于android吗?这可能很重要。 当然我不知道你的代码 - 但我想你做了一些这样的查询,按照你的描述,结果不提供reservationID?在您的数据库模型中是否没有为reservationID设置主键或外键?你能查一下吗?你可以做这样的事情来获得所有预订,除了指示的间隔 - 正如我所说 - 我不知道你的数据库布局和方案等。

 $this->db->select('*');
    $this->db->from('reservations');
    $this->db->where('startdate <=', $startdate);
    $this->db->where('enddate >=', $enddate);
    $query = $this->db->get();

但我不明白你想要什么。为什么在查询结果中没有得到预留ID?

祝你好运

Axel Arnold Bangert - Herzogenrath 2016

答案 1 :(得分:0)

$startdate = '2016-05-23';
$enddate = '2016-05-27';

$this->$db->select('reservationid, startdate, enddate');
$this->$db->from('reservation');
$this->$db->where('startdate >=', $startdate);
$this->$db->where('enddate <=', $enddate);
$query = $this->$db->get()->result_array();
$this->$db->trans_complete();                   
    return $query;

Result = Array ( [0] => Array ( [reservationid] => KHAN2016Q224 [startdate] => 2016-05-23 [enddate] => 2016-05-27 ) )

以上查询返回上述结果。

但是当我提供

$startdate = '2016-05-24';
$enddate = '2016-05-26'; 

然后它返回一个空数组。我想要在日期之间搜索时返回上面的reservationid。