PHP & MySQL - 如何按天计算访问量
PHP & MySQL - How to count visits by day
我有一个名为 #__products_visits 的 table 记录访问。它的结构是:
id
product_id
product_name
date
计数器脚本在访问时插入一条记录。因此,每一行代表对数据库的一次访问。现在,我想按天计算访问次数并按天获取访问次数。这是一个 Joomla!组件,所以查询最好在 Joomla! class.
限制位的WHERE条件切换器:
$date_range = $_REQUEST['date'];
switch($date_range) {
case 1:
$scope = ' >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)';
break;
case 2:
$scope = ' >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)';
break;
case 3:
$scope = ' >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)';
break;
case 4:
$scope = ' >= DATE_SUB(CURDATE(), INTERVAL 365 DAY)';
break;
case 5:
$scope = ' <= CURDATE()';
break;
default:
$scope = ' >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)';
break;
}
我目前得到的select函数:
// Count cart rows
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query
->select('*')
->from($db->quoteName('#__product_visits'))
->where($db->quoteName('date') . $scope);
$db->setQuery($query);
$results = $db->loadObjectList();
// And here is where I've been stopped :-)
如果您的 'date' 确实是一个日期类型变量,那么它就可以工作 - 不知道您在使用 INTERVALS
做什么
SELECT date_format(`date`,'%Y-%m-%d') as DateVisited, count(*) from #__products_visits group by DateVisited
我在user3741598的帮助下想出来的方法是:
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query
->select('date_format(`date`,"%Y,%m,%d") as DateVisited, COUNT(*) as row')
->from($db->quoteName('#__product_visits'))
->where($db->quoteName('date') . $scope)
->group($db->quoteName('DateVisited'));
$db->setQuery($query);
$results = $db->loadObjectList();
然后我通过foreach
从
中提取组数
$x = $result->DateVisited;
以及每个组的访问次数:
$y = $result->row;
我有一个名为 #__products_visits 的 table 记录访问。它的结构是:
id
product_id
product_name
date
计数器脚本在访问时插入一条记录。因此,每一行代表对数据库的一次访问。现在,我想按天计算访问次数并按天获取访问次数。这是一个 Joomla!组件,所以查询最好在 Joomla! class.
限制位的WHERE条件切换器:
$date_range = $_REQUEST['date'];
switch($date_range) {
case 1:
$scope = ' >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)';
break;
case 2:
$scope = ' >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)';
break;
case 3:
$scope = ' >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)';
break;
case 4:
$scope = ' >= DATE_SUB(CURDATE(), INTERVAL 365 DAY)';
break;
case 5:
$scope = ' <= CURDATE()';
break;
default:
$scope = ' >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)';
break;
}
我目前得到的select函数:
// Count cart rows
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query
->select('*')
->from($db->quoteName('#__product_visits'))
->where($db->quoteName('date') . $scope);
$db->setQuery($query);
$results = $db->loadObjectList();
// And here is where I've been stopped :-)
如果您的 'date' 确实是一个日期类型变量,那么它就可以工作 - 不知道您在使用 INTERVALS
做什么SELECT date_format(`date`,'%Y-%m-%d') as DateVisited, count(*) from #__products_visits group by DateVisited
我在user3741598的帮助下想出来的方法是:
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query
->select('date_format(`date`,"%Y,%m,%d") as DateVisited, COUNT(*) as row')
->from($db->quoteName('#__product_visits'))
->where($db->quoteName('date') . $scope)
->group($db->quoteName('DateVisited'));
$db->setQuery($query);
$results = $db->loadObjectList();
然后我通过foreach
从
$x = $result->DateVisited;
以及每个组的访问次数:
$y = $result->row;