我们已经在drupal中进行了自定义注册表单。 我们在哪里添加名字,姓氏,城市,技能。 现在我们想要根据以下条件搜索用户。 但是如果当drupal创建一个新字段时,在后端它会创建一个带有字段名称的表。 例如:field_data_field_account_type
like we have writtern code for search on te basis of account type
function getUsersList($type=null){
$query = db_select('users', 'u');
$query->join('field_data_field_account_type', 'at', 'u.uid = at.entity_id');
$query->fields('at')
->fields('u')
->condition('at.field_account_type_value',$type,'=')
->orderBy('created', 'DESC');
$result = $query->execute();
$users = array();
while($record = $result->fetchAssoc())
{
$user_fields = user_load($record['uid']);
$users[] = $user_fields;
}
return $users;
}
but if we will search on multiple tables using joins search will become slow.
那么,我们应该遵循什么方法来获得名字,城市,技能, 没有使用连接。
在drupal中是否有任何表单字段api函数来解决它。
我找到了一个解决方案,但在这里我面临一个问题。这是我的代码
i found some solution for my problem but i am facing one problem
$query = new EntityFieldQuery();
$results=$query->entityCondition('entity_type', 'user');
if($type!=null)
{
$query->fieldCondition('field_account_type', 'value',$type, '=');
}
if($name!=null)
{
$query->fieldCondition('field_first_name', 'value',"%$name%", 'like');
//$query->fieldCondition('field_last_name', 'value',"%$name%", 'like');
}
/*if($city!=null&&isset($city))
{
$query->fieldCondition('field_city', 'value',"%$city%", 'like');
}
if($skill!=null&&isset($skill))
{
$query->fieldCondition('field_skills', 'value',"%$skill%", 'like');
}*/
$results->execute();
This code only work on first name , bu not for last name.lIKE here and condition is working for last name
所以我可以使用或只使用一个文本框来设计这样的查询。使用firstname,lastname,city,skil等用户。
答案 0 :(得分:0)
我要说的第一件事是我对drupal一无所知,但我会建议一个不同的观点。 你的问题是加入真的很慢,所以你不喜欢非加入解决方案。
我认为的是改善加入速度而不是不使用它,因为我认为"加入"在你的情况下做一件相当合理的事情。
为了解决问题,我建议在用户表中添加uid的索引。还有entity_id& field_data_field_account_type中的field_account_type_value。
将这3列索引后,如果您以前没有对其进行索引,则应大大提高查询速度。
答案 1 :(得分:0)
我没有得到任何解决方案所以我将用户的数据复制到另一个表中,因此搜索变得很快。
我的代码是:
function users_user_insert(&$edit, $account, $category) {
$coFounder = '';
$founder = '';
if($account->field_account_type['und'][0]['value']=='co-founder'){
$coFounder = $account->field_account_type['und'][0]['value'];
}
else if(($account->field_account_type['und'][0]['value']=='founder')&&($account-
>field_account_type['und'][1]['value']=='co-founder'))
{
$founder = $account->field_account_type['und'][0]['value'];
$coFounder = $account->field_account_type['und'][1]['value'];
}
else{
$founder = $account->field_account_type['und'][0]['value'];
}
$result = db_insert('lew_users_meta')->fields(array('uid'=>$account-
>uid,'name'=>$account->name,'first_name'=>$account->field_first_name['und'][0]
['value'],
'last_name'=>$account->field_last_name['und'][0]['value'],'mail'=>$account->mail,
'city'=>$account->field_city['und'][0]['value'],
'skills'=>$account->field_skills['und'][0]['value'],
'coFounder'=>$coFounder,'founder'=>$founder,'created'=>time()
)
)
->execute();
}
function users_user_update(&$edit, $account, $category) {
$coFounder = '';
$founder = '';
if($account->field_account_type['und'][0]['value']=='co-founder'){
$coFounder = $account->field_account_type['und'][0]['value'];
}
else if(($account->field_account_type['und'][0]['value']=='founder')&&($account-
>field_account_type['und'][1]['value']=='co-founder'))
{
$founder = $account->field_account_type['und'][0]['value'];
$coFounder = $account->field_account_type['und'][1]['value'];
}
else{
$founder = $account->field_account_type['und'][0]['value'];
}
$result = db_update(' lew_users_meta')
->fields(array('name'=>$account->name,'first_name'=>$account-
>field_first_name['und']['0']['value'],
'last_name'=>$account-
>field_last_name['und'][0]['value'],'mail'=>$account->mail,
'city'=>$account->field_city['und'][0]['value'],
'skills'=>$account->field_skills['und']['0']['value'],
'founder'=>$founder,'coFounder'=>$coFounder,'modified'=>time()
)
)
->condition('uid', $account->uid,'=')
->execute();
}
所以我们使用hook在另一个表中插入数据。因此我们不应该加入 表
如果您有更好的解决方案,请在此处发布