Drupal通过配置文件firstname和lastname查询搜索用户

时间:2010-07-02 13:41:59

标签: sql drupal search profile

我正在编写模块,只允许通过提供名字和姓氏(没有emial地址或用户名)来快速添加用户。这些用户就像“鬼”一样,仅供临时使用。 在添加用户模块之前,需要检查系统中是否已存在具有相同名字和姓氏的用户,以避免创建具有相同个人名称的多个ghost用户。 换句话说 - 我需要一个SQL查询来按最后一个名字过滤用户。 到目前为止,我能够提出这样的问题:

$sql = "SELECT DISTINCT u.uid AS uid FROM users u INNER JOIN profile_values pv ON u.uid = pv.uid INNER JOIN profile_fields pf ON pv.fid = pf.fid "
                ."WHERE pf.fid = 2 AND pv.value = '%s'";
            $uid = db_fetch_object(db_query("$sql", $ln))->uid;

这个查询不太好,因为它只通过匹配lastname来找到用户。我不是SQL专家,但我不知道如何连接表来缩小结果,因此firstname和lastname匹配: 像这样的东西

WHERE pf.fid = 2 AND pv.value = 'LASTNAME' AND pf.fid = 1 AND pv.value = 'FIRSTNAME';

在我的profile_fields表中,我有: fid = 2 - >姓 fid = 1 - >姓名

最后一个WHERE子句不起作用。我希望那些熟悉Drupal系统中用户配置表关系的人知道我要求的内容。

1 个答案:

答案 0 :(得分:2)

您需要使用不同的别名加入两次。类似的东西:

$sql = "SELECT DISTINCT u.uid AS uid FROM {users} u 
INNER JOIN {profile_values} pv ON u.uid = pv.uid 
INNER JOIN {profile_fields} pf ON pv.fid = pf.fid
INNER JOIN {profile_values} pv2 ON u.uid = pv2.uid 
INNER JOIN {profile_fields} pf2 ON pv2.fid = pf2.fid
WHERE pf.fid = 2 
AND pv.value = '%s'
AND pf2.fid = 1 
AND pv2.value = '%s'";

 $uid = db_fetch_object(db_query("$sql", array($ln, $fn)))->uid;

还有drupal你应该把{}放在表名周围。