2017-08-30 80 views
3

我有一个mysql数据库中的用户表,每个用户有一个referral_code列和referral_code_used列。PHP:根据2列将mysql数据库导出为CSV?

referral_code拥有用户可以与他人共享的推荐代码。

referral_code_used保存用户从其他用户收到并且他们在注册期间输入的引荐代码。

实施例:

user referral_code referral_code_used  email 

A   TW89        [email protected] 
--------------------------------------------------------------- 
B   TW66    TW89   [email protected] 

在上面的例子中,用户B已经使用的用户A referral_code

现在,我需要做的就是将这些数据导出到一个CSV文件,CSV文件应该是这样的(排序):

referrer     referred   

[email protected]   [email protected] 

就是这样。

到目前为止,我可以使用下面的代码导出整个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(); 

?> 

,我没有看到任何错误了!

+0

调试导出CSV文件,尝试使用ob_clean()在文件的启动和使用的error_reporting(E_ALL),并确保你的SQL查询工作 –

+0

你有u.ref_code = ref.ref_code_used,根据你的数据库,应该是你。 referral_code = ref。 referral_code_used 难道是这样吗? –

回答

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 
+0

这也会生成一个空的CSV文件! –

+0

在尝试创建CSV文件之前首先单独测试查询(例如,在mysql工作台中)。也许你没有给我们一个数据结构或内容的准确描述。 – ADyson

+0

我只是尽量减少一切。显然MYSQL表有更多的列,但没有必要在我的问题中提及它们。 –

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 
+0

请查看我的编辑。 –