Mysql喜欢搜索多列

时间:2013-05-04 11:42:56

标签: mysql drupal-7

我有一个带有搜索选项的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_fieldcompanyname与关键字匹配,之后其他记录与companyname或{{1}匹配}。请告知实现此目的。

1 个答案:

答案 0 :(得分: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();
?>