PHP Mysql按条件排序

时间:2012-11-09 21:31:33

标签: php mysql sql-order-by

我想命令我的事件配置得很好,我面临的是什么,

我订购我的活动,如果它们是开放销售的,我首先展示它们,之后我展示那些可以预订且不能出售的那些,但是当人们预订时,我为他们打开我的活动3 -4天,只有预订者可以购买该活动,

我想要的是简单的,我想展示他们已经预订的活动,并且该活动是开放的,仅供那些预订的人出售;首先是顺序,然后是那些对所有人开放的,而不是那些因为只是为了预订而无法购买的那些

例如,A是为所有人开放的活动,B是开放预订,C只能由预订的人购买,

我的查询返回的是:A - B - C

我想要的是:C - A - B

我试图更改查询,但我知道我在那里犯了错误

这是我的代码:

try
{
$event_query = "SELECT * FROM `events` ORDER BY `reservation` ASC, `eventdate` ASC";
$event_query_check = $db->prepare($event_query);
$event_query_check->execute();
$ac = $db->query("SELECT FOUND_ROWS()")->fetchColumn();
while($fetch = $event_query_check->fetch (PDO::FETCH_ASSOC) ){ 

// fetching the info exc in here


try {
$q = "SELECT * FROM `event_reservation` WHERE `attendee_id` = :attendee_id AND `event_id` = :event_id";
$check_query = $db->prepare($q);
$check_query->bindParam(':attendee_id', $userid, PDO::PARAM_INT);
$check_query->bindParam(':event_id', $event_id, PDO::PARAM_INT);
$check_query->execute();
$n2 = $db->query("SELECT FOUND_ROWS()")->fetchColumn();
}
catch(PDOException $e) {
$log->logError($e." - ".basename(__FILE__));
}

// not working part of the code

 if($n2){
$event_query = "SELECT * FROM `members` ORDER BY `reservation_open_to_sell` DESC, `reservation` ASC, `eventdate` ASC";
}

// ends here

} // end of while
} // end of try
catch(PDOException $e) {
$log->logError($e." - ".basename(__FILE__));
}

谢谢

1 个答案:

答案 0 :(得分:1)

你可以这样做:

order by case when reservation='c' then 1 
              when reservation='a' then 2
              when reservation='b' then 3 end