我在我的搜索结果中进行了年龄筛选,但我的语法出现错误:
这是我用于 sql 的 php;
//the age advance search
switch (Request::get('member_age')):
case '18-25':
$age = " AND user_birthdate BETWEEN Date_Add(yy, -26, GetDate()) And Date_Add(yy, -18, GetDate()) ";
break;
case '26-35':
$age = "AND user_birthdate BETWEEN Date_Add(yy, -35, GetDate()) And Date_Add(yy, -26, GetDate())";
break;
case '36-45':
$age = "AND user_birthdate BETWEEN Date_Add(yy, -45, GetDate()) And Date_Add(yy, -36, GetDate())";
break;
case '46-55':
$age = "AND user_birthdate BETWEEN Date_Add(yy, -55, GetDate()) And Date_Add(yy, -46, GetDate())";
break;
case '56-65':
$age = "AND user_birthdate BETWEEN Between Date_Add(yy, -65, GetDate()) And Date_Add(yy, -56, GetDate())";
break;
case '65+':
$age = "AND user_birthdate BETWEEN Between Date_Add(yy, -999999, GetDate()) And Date_Add(yy, -55, GetDate())";
break;
default:
$age = "";
endswitch;
还有我的sql:
$search_people_sql = "SELECT *
FROM users
LEFT JOIN friends
ON users.user_id = friends.friends_friend
LEFT JOIN friend_request
ON users.user_id = friend_request.friend_request_to
OR users.user_id = friend_request.friend_request_from
LEFT JOIN user_personal_information
ON user_personal_information.user_personal_information_user = friends.friends_friend
WHERE CONCAT_WS(' ', user_personal_information.user_firstname, user_personal_information.user_surname) LIKE ?
AND user_enabled = 1
AND user_id != ?
".$age."
但是我得到这个错误
Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-26, GetDate()) And Date_Add(yy, -18, GetDate()) '
最佳答案
抱歉,这不是答案,只是大评论。
你有:
AND user_birthdate BETWEEN Date_Add(yy, -26, GetDate()) And Date_Add(yy, -18, GetDate())";
这个语法是错误的:
mysql中没有
GetDate()
函数DATE_ADD
根据 documentation 有不同的语法:
如果你使用 mysql,这部分看起来像:
AND user_birthdate BETWEEN Date_Add(NOW(), INTERVAL -26 YEAR) And Date_Add(NOW(), INTERVAL -18 YEAR)";
因此您必须像这样更改所有字符串以更正 mysql 语法。
关于mysql - 使用 between、date_add 和 getdate 进行年龄搜索的语法中的 sql 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33154988/