【发布时间】:2014-03-15 10:56:11
【问题描述】:
我已经有一个高级 mysql 查询。按用户收藏的上传、搜索关键字和日期范围过滤结果。
现在我需要在此之上添加另一个排序。我想按最喜欢的人订购这整件事。大多数收藏夹是通过计算收藏夹表中upload_ids 的出现来计算的。它应该按最喜欢的 last_update 排序。
我已经查看了 mysql 查询的 COUNT() 元素,但是很难理解我是如何在这个已经很高级的语句构造中得到它的......另外因为最喜欢的事情发生在另一个表中。
我有三个mysql表: + 用户(ID、日期、用户、密码) + 上传(id、user_id、日期、last_update、描述、标签、online_state) + 收藏夹(id、日期、user_id、upload_id)
$query = 'SELECT * FROM uploads WHERE online_state = 1';//select all online uploads
//FILTER FAVORITES //$favorites_ids are the favorites of the logged in user, being queried in another statement
if ($upload_display_sort == 'favorites')
$query .= ' AND id IN ('.implode(',', $favorites_ids).')';//returns 1,2,3,4,5
//FILTER SEARCH
if ( isset($_GET['tags']) )
$query .= ' AND MATCH (description,tags) AGAINST ("'.urldecode($_GET['tags']).'")';
//FILTER DATE
if ( isset($_GET['timeframe'])
and ( $_GET['timeframe'] == '3days'
or $_GET['timeframe'] == '2weeks'
or $_GET['timeframe'] == '3months') )
{
$end_date = time();//current time in unix format
switch ( $_GET['timeframe'] )
{
case '3days': $start_date = strtotime('-3 days',$end_date); break;
case '2weeks': $start_date = strtotime('-2 weeks',$end_date); break;
case '3months': $start_date = strtotime('-3 months',$end_date); break;
default: $start_date = strtotime(''); break;//1970-01-01 01:00:00
}
$end_date = date("Y-m-d H:i:s", $end_date);//current time in mysql format
$start_date = date("Y-m-d H:i:s", $start_date);//end time in mysql format
$query .= ' AND last_update BETWEEN "'.$start_date.'" AND "'.$end_date.'"';
}
【问题讨论】:
标签: php mysql sorting favorites