Как вывести MySQL запрос в CSV изменяя значение столбца с помощью функции PHP - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь экспортировать данные своей таблицы в 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 выбрать из $conversionServiceId массив

Я не могу понять, как выбрать массив форм. У меня более 100k строк

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Рабочий пример:

<?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);

?>

Вы можете ввести свой логин и пароль, имя_базы_данных, поместить этот файл в корневую папку и протестировать его из браузера.

0 голосов
/ 05 января 2019

Вы не можете так смешивать 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';

Если вы имеете дело с большим списком конверсий, вы можете сохранить его в таблице базы данных. Скажем, ваша таблица преобразования называется yourconversiontable и содержит столбцы old и new, затем:

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';
...