MySQL и группа CONCAT() максимальная длина
Я использую GROUP_CONCAT() в запросе MySQL для преобразования нескольких строк в одну строку.
Однако, максимальная длина результата этой функции 1024 символы.
Я очень хорошо знаю, что я могу изменить параметр group_concat_max_len чтобы увеличить этот лимит:
SET SESSION group_concat_max_len = 1000000;
однако, на сервере, который я использую, я не могу изменить какой-либо параметр. Не используя предыдущий запрос и не редактируя файл конфигурации.
так что мой вопрос:
Есть ли другой способ чтобы получить вывод запроса из нескольких строк в одну строку?
6 ответов:
SET SESSION group_concat_max_len = 1000000;- это временная, сессионная область, настройка. Это относится только к текущей сессии вы должны использовать его так.
SET SESSION group_concat_max_len = 1000000; select group_concat(column) from table group by columnвы можете сделать это даже при совместном хостинге, но когда вы используете другой сеанс, вам нужно повторить .
правильный параметр для установки максимальной длины:
SET @@group_concat_max_len = value_numeric;
value_numericдолжно быть > 1024; по умолчаниюgroup_concat_max_lenзначение 1024.
включите этот параметр в xampp my.файл ini конфигурационный файл:
[mysqld] group_concat_max_len = 1000000затем перезапустите XAMPP mysql
правильный синтаксис mysql>
SET @@global.group_concat_max_len = integer;
Если у вас нет прав для этого на сервере, где находится ваша база данных, используйте запрос типа:
mySQL="SET @@session.group_concat_max_len = 10000;"или другое значение.
следующую строку:SET objRS = objConn.Execute(mySQL)переменные могут быть разные.
тогдаmySQL="SELECT GROUP_CONCAT(......);"etc
Я использую последнюю версию, так как у меня нет привилегий, чтобы изменить значение по умолчанию 1024 глобально (с помощью cPanel).
Надеюсь, это поможет.
CREATE TABLE some_table ( field1 int(11) NOT NULL AUTO_INCREMENT, field2 varchar(10) NOT NULL, field3 varchar(10) NOT NULL, PRIMARY KEY (`field1`) ); INSERT INTO `some_table` (field1, field2, field3) VALUES (1, 'text one', 'foo'), (2, 'text two', 'bar'), (3, 'text three', 'data'), (4, 'text four', 'magic');этот запрос немного странный, но ему не нужен другой запрос для инициализации переменной; и он может быть встроен в более сложный запрос. Он возвращает все ' field2, разделенные точкой с запятой.
SELECT result FROM (SELECT @result := '', (SELECT result FROM (SELECT @result := CONCAT_WS(';', @result, field2) AS result, LENGTH(@result) AS blength FROM some_table ORDER BY blength DESC LIMIT 1) AS sub1) AS result) AS sub2;
Comments