1

我有一个带有搜索选项的 drupal 站点。如果用户输入搜索关键字,我需要将其与多个列进行比较并显示记录。

我尝试了以下查询

$search = 'test';

$sql_query = db_select('logoinfo', 'l')->fields('l');
$or = db_or();
$or->condition('search_field', '%'.db_like($search).'%','LIKE');
$or->condition('companyname', '%'.db_like($search).'%','LIKE');
$sql_query->condition($or);
$selectlogos =  $sql_query->execute();

它以自动递增 Id asc 的顺序显示与搜索关键字匹配的所有记录。

但是我想首先显示同时具有search_field并与关键字匹配的记录,然后再显示与orcompanyname匹配的其他记录。请建议实现这一目标。companynamesearch_field

4

1 回答 1

1

由于orderBy需要字段名称并且不能按表达式排序,因此您需要使用addExpression获取别名,然后按该别名排序。如果值不在两个字段中,则我的示例中的表达式将返回 0,如果在两个字段中都将返回 1。据我所知,这应该是标准 SQL,但它可能因不同的数据库后端而异;所以表达式可能需要根据您使用的数据库进行调整。

<?php
$search = 'test';
$sql_query = db_select('logoinfo', 'l')->fields('l');
$or = db_or();
$or->condition('search_field', '%'.db_like($search).'%','LIKE');
$or->condition('companyname', '%'.db_like($search).'%','LIKE');
$sql_query->condition($or);

$safe_search = db_like($search);
$ex_alias = $sql_query->addExpression("l.search_field LIKE '%$safe_search%' AND l.companyname LIKE '%$safe_search%'");
$sql_query->orderBy($ex_alias, 'DESC');

$selectlogos =  $sql_query->execute();
?>
于 2013-05-05T02:32:09.950 回答