【问题标题】:Getting data from mysql between two dates for a joomla project在 joomla 项目的两个日期之间从 mysql 获取数据
【发布时间】:2014-08-09 15:06:14
【问题描述】:

我必须修改一个简单的项目来以不同的方式显示一些值。

我有一个 MySQL 数据库,其中存储了预订。

我想从预订中获取所有数据,选择房间和时间段。

这是我的疑问:

function getReservation($idroom,$date){
    $db=JFactory::getDbo();
    $query=$db->getQuery(true);
    $datecheck=$date->format('%Y-%m-%d');

    $query
         ->select($db->quoteName(array('idroom','status','idguests','nguests','value_paid','value_pending','value_full','valid_from','valid_to','today','extra_ids','nchilds')))
         ->from($db->quoteName('#__bookitbooking'))
         ->where($db->quoteName('idroom')."=".$idroom)
         ->and ( $db->quoteValue($datecheck) . "BETWEEN" . $db->quoteName('valid_from') . "AND" . $db->quoteName('valid_to'));
    $db->setQuery($query);

    $res = $db->loadObjectList();
    return $res;
}

但是and 子句似乎没有效果,实际上当我从查询中获取存储的预留计数时,我得到了与$idroom 值匹配的所有内容。

通过该函数,我想知道对于特定日期是否存在预订,如果存在,我想获取所有参数。

我的错在哪里?

显然我最多只能获得一个预订对象。

【问题讨论】:

  • 您需要将AND inside SQL 语句 - 现在,您将它放在字符串之外。这不会引发语法错误的唯一原因是 PHP 也有一个 AND 运算符。
  • 这样? ->where(($db->quoteName('idroom')."=".$idroom) ."and".($datecheck."BETWEEN".$db->quoteName('valid_from') AND $db->quoteName('valid_to')));
  • 不,我说的是两个日期列之间的 AND ......
  • 以这种方式:->and($datecheck."BETWEEN".$db->quoteName('valid_from').'and'. $db->quoteName('valid_to')); 我得到了同样的行为
  • 如果 joomlas 查询生成器不支持 BETWEEN,请改用两个简单的条件:$datecheck >= valid_from 和 $datecheck

标签: php mysql joomla2.5


【解决方案1】:

您的语法有错误。在使用核心 Joomla DBO 类时,在第二个 where 子句中假设“和”,您可以在其中检查日期。将第二个 where 子句行更改为:

->where(INSERT DATE QUERY HERE);

* 编辑 *

我注意到的另外几件事是日期格式以及将值用引号括起来的方法,用于表名和 $datecheck 变量。并不是说您使用的日期格式不应该或不会起作用,但传统上我总是使用 MySQL 语法来格式化我的日期。试试这个,它解释了 MySQL 日期格式并使用了用于包装表名的 DBO 方法:

function getReservation($idroom,$date){
    $db=JFactory::getDbo();
    $query=$db->getQuery(true);
    $datecheck= date('Y-m-d H:i:s');

    $query
         ->select($db-quoteName(array('idroom','status','idguests','nguests','value_paid','value_pending','value_full','valid_from','valid_to','today','extra_ids','nchilds')))
         ->from($db->quote('#__bookitbooking'))
         ->where($db->quoteName('idroom')."=".$idroom)
         ->where( $db->quoteName($datecheck) . "BETWEEN" . $db->quoteName('valid_from') . "AND" . $db->quoteName('valid_to'));

    $db->setQuery($query);

    $res = $db->loadObjectList();
    return $res;

}

【讨论】:

  • 这样? :->where($db->quoteName('idroom')."=".$idroom) ->where ( $db->quoteValue($datecheck) . "BETWEEN" . $db->quoteName('valid_from') . "AND" . $db->quoteName('valid_to')); $db->setQuery($query);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 2013-10-19
  • 2019-04-19
  • 2011-10-12
  • 2021-05-19
  • 2012-05-01
  • 2011-11-25
相关资源
最近更新 更多