Несколько строк PHP для одной записи в 1 строку с несколькими столбцами

Так что это будет звучать странно, и я постараюсь изо всех сил объяснить.

У меня есть таблица 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. Проблема в том, что я даже не знаю, с чего начать. Извините, если это не имеет смысла. Я могу уточнить.

Здесь нет вопросов, чувак. Вы написали список желаний. Что вы ожидаете получить в качестве ответа?

N.B. 25.04.2018 21:51

Я отправил случайно, не успев закончить. Надеюсь, теперь в этом есть больше смысла.

user9699990 25.04.2018 21:53

Вы делаете это по частям. Не все сразу. Выберите 10 записей за раз, обработайте их, вставьте в csv, перейдите к следующему 10. У вас 600 000 строк, если вы попытаетесь выбрать все - это займет время и занимает хороший кусок памяти. Поскольку кода нет, сложно сказать вам что-либо еще.

N.B. 25.04.2018 21:57

ты просто не спрашиваешь обратной связи

karisma 18.02.2021 08:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
263
2

Ответы 2

Я бы сделал это (заменил имена столбцов / таблиц на имена вашей базы данных):

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 на долгое время (в зависимости от вашего движка это может иметь значение для других пользователей).

Другие вопросы по теме