PHP:基于2个列将MySQL数据库导出为CSV?

3

我在mysql数据库中有一个用户表,每个用户都有一个推荐码列和一个已使用推荐码列。

推荐码保存用户的推荐码,可以与其他人分享。

已使用推荐码保存来自其他用户的推荐码,用户在注册时输入。

例如:

user   referral_code    referral_code_used        email

A         TW89                                email@email.com
---------------------------------------------------------------
B         TW66               TW89            email2@email.com   

在上面的示例中,用户B使用了用户A的推荐码referral_code
现在需要做的是将这些数据导出到一个CSV文件中,CSV文件应该长这样(有点像):
referrer                   referred         

email@email.com         email2@email.com 

就是这样。

目前,我可以使用以下代码将整个 MySQL 导出为 CSV 文件,但我无法弄清楚我想要做什么,也不知道是否可能:

<?php

    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename=data.csv');

    $output = fopen('php://output', 'w');

    $rows = mysqli_query($db, 'SELECT * FROM `users`');

    while ($row = mysqli_fetch_assoc($rows)) {


      fputcsv($output, $row);
    }
    fclose($output);
    mysqli_close($db_conx);
    exit();

?>

任何帮助都将不胜感激。
提前致谢。
编辑:
我尝试过这个方法,但它会生成一个空的CSV文件:
<?php

    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename=data.csv');

    $output = fopen('php://output', 'w');

    $rows = mysqli_query($db_conx, 'SELECT u.email as referrer, ref.email as referred from users u INNER JOIN users ref on u.ref_code=ref.ref_code_used');

    while ($row = mysqli_fetch_assoc($rows)) {


      fputcsv($output, $row);
    }
    fclose($output);
    mysqli_close($db_conx);
    exit();

?>

我完全没有看到任何错误!


要调试导出的CSV文件,请尝试在文件开头使用ob_clean(),并使用error_reporting(E_ALL),确保您的SQL查询正常运行。 - Vipul L.
你的代码应该是 u.referral_code=ref.referral_code_used,根据你的数据库。 - Carlos Alves Jorge
2个回答

1
这应该可以实现 - 你需要的概念是将表与自身进行内连接,以便根据推荐代码将不同行匹配在一起:
select 
  A.email as 'referrer', 
  B.email as 'referred'
from 
  users A
  inner join users B
    on A.referral_code = B.referral_code_used

这也会生成一个空的CSV文件! - David Hope
在尝试创建CSV文件之前,请先单独测试查询(例如在MySQL Workbench中)。也许您没有给我们提供准确的数据结构或内容描述。 - ADyson
我尽可能地保持了一切的最小化。显然,MYSQL表格有更多的列,但在我的问题中提到它们是不必要的。 - David Hope
这本身没问题,但我编写的查询是针对你的示例数据的。在http://rextester.com/YWOGHC64815上查看实时示例(我不得不重命名表格才能在该环境中运行,但除此之外它是相同的)。因此,要么示例数据并不真正代表您的数据结构,要么您的数据库中根本没有匹配的数据,或者有其他重要的事情您没有告诉我们。但就我所看到的,我已经回答了提出的问题,并提供了一个可行的查询。 - ADyson
糟糕,我的 MySQL 数据库中没有用户 A、B。我只是在问题中使用它们来解释情况! - David Hope
那个特定的东西本身并不重要。查询不使用或需要 user 列,也不考虑其中的值。但是必须有一些具有匹配推荐代码的用户在那些列中,否则会得到一个空结果集。 - ADyson

1

这似乎是需要在同一张表上进行关联操作的情况。我想可能会像这样:

Select u.email as referrer, ref.email as referred from users u 
INNER JOIN users ref on u.referral_code=ref.referral_code_used

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接