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

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

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

А можно пример как это можно эмулировать, Или где почитать о примере реализации синтаксиса реализации
...
Рейтинг: 0 / 0
14.05.2015, 15:32:08
    #38958839
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно объединить несколько строк в пару (ключ/Значение)
Подозреваю, тут будет достаточно GROUP_CONCAT.
...
Рейтинг: 0 / 0
14.05.2015, 16:55:14
    #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
14.05.2015, 16:57:28
    #38958959
dok11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно объединить несколько строк в пару (ключ/Значение)
miksoft,

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

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

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

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

miksoft,

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

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

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



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

Во и хотелось сделать универсально и быстро.
...
Рейтинг: 0 / 0
14.05.2015, 18:04:05
    #38959085
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно объединить несколько строк в пару (ключ/Значение)
dok11,
неужели нельзя описать задачу правильно , а не проблемы которые получаются в процессе неправильного решения?
...
Рейтинг: 0 / 0
14.05.2015, 22:09:57
    #38959255
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно объединить несколько строк в пару (ключ/Значение)
dok11потому что нельзя указать модульлибо поддерживайте уникальность ключей в пределах всей системы (например, префиксами в их именах), либо добавьте поле для указания модуля.
...
Рейтинг: 0 / 0
15.05.2015, 09:12:33
    #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
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как можно объединить несколько строк в пару (ключ/Значение) / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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