mysql - 使用 between、date_add 和 getdate 进行年龄搜索的语法中的 sql 错误

标签 mysql sql

我在我的搜索结果中进行了年龄筛选,但我的语法出现错误:

这是我用于 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())";

这个语法是错误的:

  1. mysql中没有GetDate()函数

  2. 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/

相关文章:

php - 在 php 中创建用户定义的 mysql 函数

mysql - MySQL中基于今天日期的项目计数

php - 我可以重用装饰器吗?

mysql - 使用 windows phone 7 使用 mySQL 数据库

sql - 以简单的方式将 SQL 转换为 SQLite?

c# - 如何将表值参数传递给 .NET Core 中的 Dapper?

mysql - 如何为 "Check In"社会服务设计数据库

php - 当使用 PHP 查询我的 MySQL 数据库时,如何解决这个 undefined index 错误?

mysql - 来自多个表的多个计数

java - centos 无法连接mysql