【问题标题】:Drupal search user by profile firstname and lastname queryDrupal 通过个人资料名字和姓氏查询搜索用户
【发布时间】:2010-07-02 13:41:59
【问题描述】:

我正在编写模块,它只允许通过提供名字和姓氏(没有电子邮件地址或用户名)来快速添加用户。那些用户就像'幽灵',只是为了临时使用。 在添加用户模块之前需要检查系统中是否已经存在同名和姓氏的用户,以避免创建多个具有相同个人姓名的幽灵用户。 换句话说 - 我需要一个 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;

此查询不够好,因为它仅通过匹配姓氏来查找用户。我不是 sql 专家,但我不知道如何连接表以缩小结果,以便匹配名字和姓氏: 像这样的

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

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

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

【问题讨论】:

    标签: sql drupal search profile


    【解决方案1】:

    您需要使用不同的别名加入两次。比如:

    $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 模块将如何构建它,但它产生了很多肮脏的 ;-)
    • 是的。我知道 {}。刚刚从我的查询生成器中粘贴了它。
    猜你喜欢
    • 1970-01-01
    • 2021-09-23
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    相关资源
    最近更新 更多