通过mysql数据库中的sql导出phpList订阅者

时间:2014-06-12 16:25:17

标签: mysql sql phplist

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

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

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

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

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查询语言吗?

我想要运行的相关查询是查找没有attribute3值的所有id / email。在上面的示例中,这将是id的2和3.请注意,id 3甚至没有为attributeid3提供空值,它只是缺少。

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

1 个答案:

答案 0 :(得分: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
;

我希望有人能对此有所帮助。