【发布时间】: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 值匹配的所有内容。
通过该函数,我想知道对于特定日期是否存在预订,如果存在,我想获取所有参数。
我的错在哪里?
显然我最多只能获得一个预订对象。
【问题讨论】:
-
您需要将
ANDinside 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