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