1

出于某种原因,我无法从我的 phpList(版本 3.0.6)管理页面导出订阅者表。我在网上搜索过,其他几个人也遇到过这个问题,但没有发布解决方法。作为一种解决方法,我想直接查询 mySQL 数据库以检索类似的订阅者表。但我需要有关 SQL 命令的帮助。请注意,我不想导出或备份 mySQL 数据库,我想以与 phpList 管理页面中的“导出订阅者”按钮相同的方式查询它。

简而言之,我有两个表要查询。第一个表user包含每个订阅者的 ID 和电子邮件。例如:

id | email
1 | e1@gmail.com
2 | e2@gmail.com

第二个表user_attribute包含用户标识、属性标识和值。请注意,在下面的示例中,userid 1 具有所有三个可能属性的值,而 userid 的 2 和 3 要么缺少三个 attributeid 中的一个或多个,要么具有一些空白值。

userid | attributeid | value
1 | 1 | 1
1 | 2 | 4
1 | 3 | 6
2 | 1 | 3
2 | 3 | 
3 | 1 | 4

我想执行一条 SQL 语句,该语句将为每个 id/email 生成一行输出,如下所示(以 id 3 为例):

id | email | attribute1 | attribute2 | attribute3
3 | e3@gmail.com |  4 | "" | "" |               

有人可以建议可以完成此任务的 SQL 查询语言吗?

我想运行的一个相关查询是查找所有没有属性 3 值的 ID/电子邮件。在上面的示例中,这将是 id 的 2 和 3。请注意,id 3 甚至没有 attributeid3 的空白值,它只是丢失了。

任何帮助,将不胜感激。约翰

4

1 回答 1

0

我知道这是一个非常古老的帖子,但我只需要做同样的事情。这是我使用的查询。请注意,您需要根据您设置的自定义属性修改查询。你可以看到我有名字、城市和州,如下面的 AS 子句所示。您需要将它们映射到属性 ID。此外,该州有一个我链接到的州名表。我排除了列入黑名单(取消订阅)、超过 2 次退回和未确认的用户。

SELECT 
    users.email, 
    (SELECT value 
       FROM `phplist_user_user_attribute` attrs 
       WHERE
       attrs.userid = users.id and
       attributeid=1
    ) AS name,
    (SELECT value 
       FROM `phplist_user_user_attribute` attrs 
       WHERE
       attrs.userid = users.id and
       attributeid=3
    ) AS city,
    (SELECT st.name 
       FROM `phplist_user_user_attribute` attrs 
       LEFT JOIN `phplist_listattr_state` st
         ON attrs.value = st.id
       WHERE
       attrs.userid = users.id and
       attributeid=4
    ) AS state

FROM 
    `phplist_user_user` users
WHERE 
    users.blacklisted=0 and 
    users.bouncecount<3 and 
    users.confirmed=1
;

我希望有人觉得这很有帮助。

于 2020-02-25T01:06:41.630 回答