如何使用 php 函数将 mysql 查询输出到 csv 更改列值

How to output mysql query to csv changing column value using php function

我正在尝试将我的 table 数据导出到 csv,但我需要使用比较 php 数组或函数来更改列值。

我正在尝试 while 循环,但它需要很多时间,而且会导致内存问题。

我的查询

SELECT column,$conversionServiceId[column2],column3
 INTO OUTFILE '/path/to/file/result.txt'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'
  FROM yourtable WHERE columnx = 'çondition';

$conversionServiceId = [
    'green'=>'1',
    'yellow'=>'2',
    'red'=>'3'
];

第 2 列值 select 来自 $conversionServiceId 数组

我无法理解如何 select 形成 array.I 超过 100k 行

你不能这样混合使用 PHP 和 SQL。您可以先使用 SQL 下载文件,然后打开它并使用 php 对其进行修改,或者将转换逻辑移动到 SQL 查询本身。

显然第二种解决方案更有效。

如果转换列表很小,CASE(或 CTE)应该可以做到:

SELECT 
    column,
    CASE 
        WHEN column2 = 'green'  THEN 1
        WHEN column2 = 'yellow' THEN 2
        WHEN column2 = 'red'    THEN 3
    END column2
    column3
INTO 
    OUTFILE '/path/to/file/result.txt'
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
FROM yourtable 
WHERE columnx = 'çondition';

如果您要处理大型转换列表,可以考虑将其存储在数据库中 table。假设您的转换 table 称为 yourconversiontable 并且具有列 oldnew,则:

SELECT 
    t.column,
    c.new
    t.column3
INTO 
    OUTFILE '/path/to/file/result.txt'
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
FROM yourtable t
INNER JOIN yourconversiontable c ON t.column2 = c.old
WHERE t.columnx = 'çondition';

一个工作示例:

<?php
$con=mysqli_connect("localhost","user","password","db_name");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

// Your array 
$conversionServiceId = [
    'green'=>'column1',
    'yellow'=>'column2',
    'red'=>'column3'
];

$qstring = "
SELECT id," . $conversionServiceId['green'] . "
  INTO OUTFILE 'e:/result.csv'
  FIELDS TERMINATED BY ','
  LINES TERMINATED BY '\n'
  FROM nodejs;";

 // uncomment next line if you want to see query string in browser
 //echo $qstring;

mysqli_query($con, $qstring);

mysqli_close($con);

?>

您可以填写您的用户名和密码,db_name,将此文件放在您的根文件夹中,然后通过浏览器进行测试。