PHP Несколько строк для одной записи в одну строку с несколькими столбцами - PullRequest
0 голосов
/ 25 апреля 2018

Итак, это прозвучит странно, и я постараюсь объяснить, насколько это возможно.

У меня есть таблица mySQL, содержащая несколько тысяч строк (около 600 КБ), и мне нужно вывести записи в этой таблицев файл CSV.Проблема в том, что информация в таблице хранится в формате каждой строки, а не во многих столбцах.Аналогично следующему:

1 | 1 | Джон
2 | 1 | Смит
3 | 1 | Зеленый
4 | 1 | Автомобиль
5 | 2 | Джейн
6 | 2 | Доу
7 | 2 | Синий
8 | 2 | Велосипед

Я хочу взять это и вывести следующим образом.Это может быть массив.

1 | Джон | Смит | Грин | Автомобиль
2 | Джейн | Доу | Синий | Байк

Я попытался выполнить запрос с помощью mysqli, а затем выполнитьмассив и цикл через него и так далее.Это всегда занимает очень много времени.Мне нужно сделать это через комбинацию PHP и MySQL.Проблема в том, что я даже не знаю, с чего начать.Извините, если это не имеет смысла.Я могу уточнить.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Самый быстрый способ, как мне кажется, использовать всю мощь php и mysql, это два запроса:

select distinct col2

сохранить ваш результат и «для каждого» с этим значением, чтобы вы получили один запрос длякаждый во втором раунде.

select col1,col3 where col2={value} order by col1

теперь у вас есть готовый вывод для перебора каждой записи с другим «для каждого» для отображения или хранения записей.перед каждым для, введите номер итерационной строки и начало строки.затем добавьте каждое значение и разделитель и добавьте в конец строки за пределами каждого.

Поскольку ваш начальный запрос БД будет иметь ограниченный ответ (один столбец, различные значения), он не будет слишком длинным(по времени) или слишком большой (память).И отдельные запросы должны разделять память, поэтому каждый из них будет крошечным и быстрым.это также могло бы предотвратить блокировку БД на длительное время (в зависимости от вашего движка это может иметь значение для других пользователей).

0 голосов
/ 25 апреля 2018

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

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" должен сделать все остальное, если нужно.

...