代码之家  ›  专栏  ›  技术社区  ›  pelkas13

在条令查询生成器中首先选择精确匹配

  •  0
  • pelkas13  · 技术社区  · 7 年前

    我需要在Symfony 3.4中的查询生成器中编写一个查询。它必须按完全匹配的顺序订购。例如,我有3行的列名为: “test”、“test 1”、“test1”,当我搜索字符串“text”时,顺序是:

    1. test
    2. test1
    3. test 1
    

    SELECT *
    FROM table t
    WHERE col LIKE '%test%'
    ORDER BY INSTR(col,'test') asc, col asc;
    

    我尝试在查询生成器中使用函数LOCATE和INSTR,但出现错误:

    Attempted to call function "LOCATE" from namespace "AppBundle\Repository".
    

    这是我的疑问:

    $qb->select('c.id')
                    ->from($this->_entityName, 'c')
                    ->where('c.name LIKE :searchTerm')
                    ->orderBy(LOCATE($searchTerm, 'c.name'), $sortDirection)
                    ->groupBy('c.id')
                    ->setParameter('searchTerm', '%' . $searchTerm . '%');
    

    编辑:我解决了这个问题。

    ->orderBy(LOCATE($searchTerm, 'c.name'), $sortDirection)
    

    ->orderBy('LOCATE(:searchTermLocate, c.name)', $sortDirection)
    ->setParameter('searchTermLocate', $searchTerm)
    

    1. pod czapką
    2. czapka
    3. czapka z daszkiem
    4. czapka zimowa
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Chris    7 年前