我想对数据进行排序,并在今天之前排除结果,这很有效';这是我自己的,但与我的其他问题无关


I want to sort data, and exclude results before todays date, it works on it's own, but not with the rest of my query

这是问题所在。我正在根据搜索字段条目搜索邮轮。我只想返回那些还没有航行的邮轮。我在巡航表中搜索标题、目的地、代码,在行程表中搜索港口。我现在搜索,然后得到过去的邮轮?

$query_search_cruises = sprintf("SELECT id, title, code FROM cruises WHERE departs >   CURDATE() AND title LIKE %s OR destination LIKE %s OR code LIKE %s OR EXISTS (SELECT * FROM itinerary WHERE port LIKE %s AND cruises.id = cruise_id )", GetSQLValueString("%" . $colname_search . "%", "text"), GetSQLValueString("%" . $colname_search . "%", "text"), GetSQLValueString("%" . $colname_search . "%", "text"), GetSQLValueString("%" . $colname_search . "%", "text"));

在MySQL中,AND的优先级高于OR,因此您的查询实际上是:

WHERE (departs > CURDATE() AND title LIKE %s) OR (destination LIKE %s) OR ...

并且CCD_ 3将获得与该条件匹配的所有行,而不管departs列如何

如果你想要不同的优先级,你必须明确地将术语分组,例如:

WHERE departs > CURDATE() AND (title LIKE %s OR destination LIKE %s OR ... )