【问题标题】:SELECT statement using CONCAT() with WHERE using CONCAT()使用 CONCAT() 的 SELECT 语句和使用 CONCAT() 的 WHERE
【发布时间】:2021-12-04 18:34:40
【问题描述】:

我想用这个语句在 MySQL 中构建一个查询:

SELECT CONCAT(students.FirstName, ' ', students.LastName) AS FullName FROM `students` WHERE CONCAT(students.FirstName, ' ', students.LastName)LIKE '%John%'

现在,我使用 Laravel 的 Query Builder,我可以使用 CONCAT() 匹配列。这是我的代码供参考:

    public function getStudent(Request $request)
    {
        $fullName = Student::select(FacadesDB::raw('SELECT CONCAT(LastName, ", ", FirstName) AS FullName'), )
            ->where(FacadesDB::raw('CONCAT(LastName, ", ", FirstName)', 'LIKE', "'% {{ $request->terms }} %'"))
            ->get();
        return response()->json($fullName);
    }

当我尝试运行代码时,我得到了这样的结果:

SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的 'SELECT CONCAT(LastName, ", ", FirstName) AS FullName from students where CO...' 附近使用正确的语法(SQL:选择 SELECT CONCAT (LastName, ", ", FirstName) AS FullName from students where CONCAT(LastName, ", ", FirstName) is null)

有没有一种方法可以实现这一目标?我花了将近 4 个小时来解决此代码,但我仍然无法解决它。每一个帮助将不胜感激。顺便说一句,我是 Laravel 的新用户。

【问题讨论】:

    标签: php mysql laravel


    【解决方案1】:

    你可以使用地图功能:-

    Student::select("firstname","lastname")
    ->where("firstname","like","%john%")
    ->orWhere("lastname","like","%john%")
    ->get()->map(function($query){
        $fullname = $query->firstname." ".$query->lastname
        return ["fullname" => $fullname]
     })
    

    【讨论】:

    • 谢谢你的提示,伙计。这类似于我最近解决的问题。我会试试这个。
    【解决方案2】:

    我会保持简单,只需将您的查询表述为:

    SELECT CONCAT(FirstName, ' ', LastName) AS FullName
    FROM students
    WHERE FirstName LIKE '%John%' OR LastName LIKE '%John%';
    

    更新的 Laravel 代码:

    public function getStudent(Request $request)
    {
        $fullName = Student::select(FacadesDB::raw('CONCAT(LastName, ", ", FirstName) AS FullName'), )
            ->where(FirstName, 'LIKE', '%John%')
            ->orWhere(LastName, 'LIKE', '%John%')
            ->get();
        return response()->json($fullName);
    }
    

    【讨论】:

    • 我还是有这样的错误:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'SELECT CONCAT(LastName, ", ", FirstName)' in 'field list'
    • 尝试从原始函数的输入中删除SELECT
    • 我删除了SELECT,但仍然出现此错误SQLSTATE[42S22]: Column not found: 1054 Unknown column 'CONCAT(LastName, ", ", FirstName)' in 'field list'
    • 检查文档以进行原始查询。我在答案顶部给你的 SQL 查询应该可以正常工作。
    猜你喜欢
    • 2018-01-02
    • 2014-12-23
    • 2014-11-17
    • 1970-01-01
    • 2016-12-21
    • 2019-12-20
    • 2012-02-20
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多