检索当前日期之后的项目
Retrieve items beyond current date
我正在使用 PHP 和 MySQL 并希望根据以下条件检索查询:
其中 book_title = 搜索查询图书结果或 book_keyword = 搜索查询结果
和
其中检索到的所有书籍的日期都大于今天。
这是我集思广益但似乎并不正确的东西,从某种意义上说一切正常,除了过滤掉日期(它确实显示日期早于当前日期的书籍)。
$get_crs = mysql_query("select * from books
where book_title like '%$search_query%'
OR book_keywords like '%$search_query%'
AND book_date1 >= CURRENT_DATE() ORDER BY book_date1");
如有任何帮助,我们将不胜感激。
请问您的问题是 "OR" 操作。尝试用括号强制 "right logic order":
select * from books where (book_title like '%$search_query%' OR book_keywords like '%$search_query%') AND book_date1 >= CURRENT_DATE() ORDER BY book_date1
首先确保 $search_query
已正确消毒,否则您很容易被 sql 注射。
要进行查询,请添加括号:
$get_crs = mysql_query("select * from books where (book_title like '%$search_query%' OR book_keywords like '%$search_query%') AND book_date1 >= CURRENT_DATE() ORDER BY book_date1");
这将获取与 ()
中任一查询匹配的书籍,然后仅获取通过 current_date
.
的书籍
这是一个优先问题。 AND
优先于 OR
所以对于数据库引擎你的查询看起来像这样:
SELECT * FROM books
WHERE ( book_title LIKE '%$search_query%' )
OR ( book_keywords LIKE '%$search_query%'
AND book_date1 >= CURRENT_DATE() )
ORDER BY book_date1
您需要通过执行以下操作(两个 LIKE
周围的括号)来强制执行正确的优先级:
SELECT * FROM books
WHERE ( book_title LIKE '%$search_query%'
OR book_keywords LIKE '%$search_query%' )
AND book_date1 >= CURRENT_DATE()
ORDER BY book_date1
或者,您可以执行以下操作:
SELECT * FROM books
WHERE CONCAT( book_title, '|', book_keywords ) LIKE '%$search_query%'
AND book_date1 >= CURRENT_DATE()
ORDER BY book_date1
附带说明一下,SELECT *
不是一个好主意。您应该明确命名您想要 return 的列。不是因为安全性,而是因为您可能 return 获取比实际需要更多的数据。您还强制数据库引擎查找应该 returned 的列。
我正在使用 PHP 和 MySQL 并希望根据以下条件检索查询:
其中 book_title = 搜索查询图书结果或 book_keyword = 搜索查询结果
和
其中检索到的所有书籍的日期都大于今天。
这是我集思广益但似乎并不正确的东西,从某种意义上说一切正常,除了过滤掉日期(它确实显示日期早于当前日期的书籍)。
$get_crs = mysql_query("select * from books
where book_title like '%$search_query%'
OR book_keywords like '%$search_query%'
AND book_date1 >= CURRENT_DATE() ORDER BY book_date1");
如有任何帮助,我们将不胜感激。
请问您的问题是 "OR" 操作。尝试用括号强制 "right logic order":
select * from books where (book_title like '%$search_query%' OR book_keywords like '%$search_query%') AND book_date1 >= CURRENT_DATE() ORDER BY book_date1
首先确保 $search_query
已正确消毒,否则您很容易被 sql 注射。
要进行查询,请添加括号:
$get_crs = mysql_query("select * from books where (book_title like '%$search_query%' OR book_keywords like '%$search_query%') AND book_date1 >= CURRENT_DATE() ORDER BY book_date1");
这将获取与 ()
中任一查询匹配的书籍,然后仅获取通过 current_date
.
这是一个优先问题。 AND
优先于 OR
所以对于数据库引擎你的查询看起来像这样:
SELECT * FROM books
WHERE ( book_title LIKE '%$search_query%' )
OR ( book_keywords LIKE '%$search_query%'
AND book_date1 >= CURRENT_DATE() )
ORDER BY book_date1
您需要通过执行以下操作(两个 LIKE
周围的括号)来强制执行正确的优先级:
SELECT * FROM books
WHERE ( book_title LIKE '%$search_query%'
OR book_keywords LIKE '%$search_query%' )
AND book_date1 >= CURRENT_DATE()
ORDER BY book_date1
或者,您可以执行以下操作:
SELECT * FROM books
WHERE CONCAT( book_title, '|', book_keywords ) LIKE '%$search_query%'
AND book_date1 >= CURRENT_DATE()
ORDER BY book_date1
附带说明一下,SELECT *
不是一个好主意。您应该明确命名您想要 return 的列。不是因为安全性,而是因为您可能 return 获取比实际需要更多的数据。您还强制数据库引擎查找应该 returned 的列。