Так что это будет звучать странно, и я постараюсь изо всех сил объяснить.
У меня есть таблица mySQL с несколькими тысячами строк (около 600 КБ), и мне нужно вывести записи из этой таблицы в файл CSV. Проблема в том, что информация в таблице хранится в формате для каждой строки, а не для многих столбцов. Аналогично следующему:
1 | 1 | Джон
2 | 1 | Смит
3 | 1 | Зеленый
4 | 1 | Car
5 | 2 | Джейн
6 | 2 | Doe
7 | 2 | Синий
8 | 2 | Велосипед
Я хочу взять это и вывести следующее. Это может быть массив.
1 | Джон | Смит | Зеленый | Car
2 | Джейн | Доу | Синий | Велосипед
Я попытался выполнить запрос с помощью mysqli, а затем выполнить массив, перебрать его и так далее. На это всегда уходит очень много времени. Мне нужно сделать это с помощью комбинации PHP и mySQL. Проблема в том, что я даже не знаю, с чего начать. Извините, если это не имеет смысла. Я могу уточнить.
Я отправил случайно, не успев закончить. Надеюсь, теперь в этом есть больше смысла.
Вы делаете это по частям. Не все сразу. Выберите 10 записей за раз, обработайте их, вставьте в csv, перейдите к следующему 10. У вас 600 000 строк, если вы попытаетесь выбрать все - это займет время и занимает хороший кусок памяти. Поскольку кода нет, сложно сказать вам что-либо еще.
ты просто не спрашиваешь обратной связи






Я бы сделал это (заменил имена столбцов / таблиц на имена вашей базы данных):
SELECT CONCAT(t.name_of_your_second_column, ';', GROUP_CONCAT(name_of_your_third_column SEPARATOR ';'))
FROM NAME_OR_YOUR_TABLE t
GROUP BY t.name_of_your_second_column
Результат будет:
1; Джон; Смит; Грин; Автомобиль
2; Джейн; Доу; Синий; Велосипед
Цикл по массиву результатов. Затем просто запишите каждую строку в том виде, в котором она есть в вашем CSV-файле, ";" быть разделителем
Если нужно, то все остальное сделает небольшой гугл "написать файл csv с помощью php".
Самый быстрый способ, как я вижу, использовать всю мощь php и mysql - это два запроса:
select distinct col2
сохраните свой результат и «для каждого» с этим значением, чтобы вы получали по одному запросу для каждого во втором раунде.
select col1,col3 where col2 = {value} order by col1
теперь у вас есть готовый вывод для перебора каждой записи с другой «для каждой» для отображения или сохранения записей. перед каждым введите номер повторяющейся строки и начало строки. затем введите каждое значение и разделитель и вставьте конечную строку за пределами каждого из них.
Поскольку ваш исходный запрос к базе данных будет иметь ограниченный ответ (один столбец, отдельные значения), он не будет слишком длинным (по времени) или слишком большим (с точки зрения памяти). И отдельные запросы должны совместно использовать память, чтобы каждый из них был крошечным и быстрым. это также могло бы избежать блокировки db на долгое время (в зависимости от вашего движка это может иметь значение для других пользователей).
Здесь нет вопросов, чувак. Вы написали список желаний. Что вы ожидаете получить в качестве ответа?