powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как можно объединить несколько строк в пару (ключ/Значение)
16 сообщений из 16, страница 1 из 1
Как можно объединить несколько строк в пару (ключ/Значение)
    #38958768
dok11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите можно ли одни запросом получить массив как если бы это была одна строка.
Например в таблице одна строка:
Столбцы: name, city, phone, email
Сделав запрос получим массив Ключ/Значение

А можно получить так же ключ/значение при структуре: id, key, value
Где key - это имя настройки, value - это значение, и в таблице много строк.

Вот можно ли в 1 запросе получить такой же результат - как с одной строкой?
Спасибо.
...
Рейтинг: 0 / 0
Как можно объединить несколько строк в пару (ключ/Значение)
    #38958786
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет в MySQL пивотов. Эмулируй на кейсах. Или в процедуре собирай текст запроса для prepared statement.
...
Рейтинг: 0 / 0
Как можно объединить несколько строк в пару (ключ/Значение)
    #38958823
dok11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

А можно пример как это можно эмулировать, Или где почитать о примере реализации синтаксиса реализации
...
Рейтинг: 0 / 0
Как можно объединить несколько строк в пару (ключ/Значение)
    #38958839
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подозреваю, тут будет достаточно GROUP_CONCAT.
...
Рейтинг: 0 / 0
Как можно объединить несколько строк в пару (ключ/Значение)
    #38958957
dok11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот я поэкспериментировал с вариантом. Но при таком подходе я должен знать кол-во строк,
а их может быть разное кол-во
Код: sql
1.
2.
3.
4.
select 
  sum(case Item when 'key1' then 1 else 0 end) as Key1,
  sum(case Item when 'key2' then 1 else 0 end) as key2
from [table]
...
Рейтинг: 0 / 0
Как можно объединить несколько строк в пару (ключ/Значение)
    #38958959
dok11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

GROUP_CONCAT - объедение в строку. Как можно её применить к моей задачи?
...
Рейтинг: 0 / 0
Как можно объединить несколько строк в пару (ключ/Значение)
    #38958960
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dok11,

Вы в любом случае должны знать количество полей в результирующем наборе данных, т.к. MySQL иначе не умеет (не считая звездочки, но тут явно не ее случай).
...
Рейтинг: 0 / 0
Как можно объединить несколько строк в пару (ключ/Значение)
    #38958962
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dok11miksoft,

GROUP_CONCAT - объедение в строку. Как можно её применить к моей задачи?Объединить, а на клиенте разобрать обратно, если нужно. Или применять в объединенном виде. Это уже зависит от задачи.
...
Рейтинг: 0 / 0
Как можно объединить несколько строк в пару (ключ/Значение)
    #38958989
dok11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftdok11,

Вы в любом случае должны знать количество полей в результирующем наборе данных, т.к. MySQL иначе не умеет (не считая звездочки, но тут явно не ее случай).

miksoft,

Да, в том то и дело, что это конфигурация проекта, проще говоря динамические настройки, То есть при добавлении к проекту дополнительного модуля в таблицу попадает "пачка" строк с конфигурацией этого модуля (Наименование / Значение)
...
Рейтинг: 0 / 0
Как можно объединить несколько строк в пару (ключ/Значение)
    #38958995
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dok11Да, в том то и дело, что это конфигурация проекта, проще говоря динамические настройки, То есть при добавлении к проекту дополнительного модуля в таблицу попадает "пачка" строк с конфигурацией этого модуля (Наименование / Значение)Ну и выбирайте их отдельными записями. Не понимаю, зачем их в одну кучу мешать.
...
Рейтинг: 0 / 0
Как можно объединить несколько строк в пару (ключ/Значение)
    #38959024
dok11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дык, что бы потом их можно было использовать в любом месте проекта - как массив ключ=>Значение, нужно в цикле постоянно строить массив, что отнимает производительность, кол-во настр. может быть от 200 до 1000. Это получится при каждом обращении к сайту будет выполняться этот перебор, я конечно понимаю что можно всё это в кэш загнать и ещё варианты есть, но мне просто интересно что так нельзя что ли сделать? Строки в столбцы перевернуть.
...
Рейтинг: 0 / 0
Как можно объединить несколько строк в пару (ключ/Значение)
    #38959039
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dok11что бы потом их можно было использовать в любом месте проекта - как массив ключ=>Значение, нужно в цикле постоянно строить массивЕго все равно строить, что из одной записи, что из множества.
dok11кол-во настр. может быть от 200 до 1000Неужели все нужны каждый раз? Не лучше ли было бы из таблицы сразу выбирать нужные значения?

dok11мне просто интересно что так нельзя что ли сделать? Строки в столбцы перевернуть.При неизвестном количестве результирующих столбцов - нельзя.
...
Рейтинг: 0 / 0
Как можно объединить несколько строк в пару (ключ/Значение)
    #38959065
dok11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Вот у нас сейчас в таблице настрое 1 строка, и каждой настройке отводится отдельный столбец. Запросом:
Код: sql
1.
SELECT * from config



Мы получаем пару ключ=>значение без всяких циклов, но это не гибко и не удобно, потому что нельзя указать модуль, тип настройки и тд.

Во и хотелось сделать универсально и быстро.
...
Рейтинг: 0 / 0
Как можно объединить несколько строк в пару (ключ/Значение)
    #38959085
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dok11,
неужели нельзя описать задачу правильно , а не проблемы которые получаются в процессе неправильного решения?
...
Рейтинг: 0 / 0
Как можно объединить несколько строк в пару (ключ/Значение)
    #38959255
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dok11потому что нельзя указать модульлибо поддерживайте уникальность ключей в пределах всей системы (например, префиксами в их именах), либо добавьте поле для указания модуля.
...
Рейтинг: 0 / 0
Как можно объединить несколько строк в пару (ключ/Значение)
    #38959418
lamer yuga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table modules(
  id auto_increment primary key,
  name varchar(100) unique
);
create table config(
  module int foreign key FK_config_modules references modules(id),
  param_name varchar(100),
  value varchar(100),
  primary key (module, param_name)
);

тогда "массив" параметров модуля можно получить так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
select * from config where module=4;

select * from config 
where module in (
  select id from modules 
  where name ='модуль 4'
  );
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как можно объединить несколько строк в пару (ключ/Значение)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]