Sql Drupal按配置文件名和姓氏查询搜索用户
我正在编写一个模块,该模块只允许通过提供名字和姓氏(没有电子邮件地址或用户名)快速添加用户。这些用户就像“幽灵”,只是暂时使用。 在添加用户模块之前,需要检查系统中是否已经存在同名和姓氏相同的用户,以避免创建多个同名的重影用户。 换句话说,我需要一个sql查询来按姓和名筛选用户。 到目前为止,我能够提出这样一个问题:Sql Drupal按配置文件名和姓氏查询搜索用户,sql,drupal,search,profile,Sql,Drupal,Search,Profile,我正在编写一个模块,该模块只允许通过提供名字和姓氏(没有电子邮件地址或用户名)快速添加用户。这些用户就像“幽灵”,只是暂时使用。 在添加用户模块之前,需要检查系统中是否已经存在同名和姓氏相同的用户,以避免创建多个同名的重影用户。 换句话说,我需要一个sql查询来按姓和名筛选用户。 到目前为止,我能够提出这样一个问题: $sql = "SELECT DISTINCT u.uid AS uid FROM users u INNER JOIN profile_values pv ON u.uid =
$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';
在我的个人资料字段表中,我有:
fid=2->lastname
fid=1->firstname
最后一个WHERE子句不起作用。我希望熟悉Drupal系统中用户配置文件表关系的人知道我的要求。您需要使用不同的别名加入两次。比如:
$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,您应该在表名周围放置{}。您很好。它就像一个符咒,如此干净。我试图看看Views模块将如何构造它,但它产生了很多脏东西;-)对我知道{}。刚从我的查询生成器中粘贴了它。