несколько значений в одном поле таблицы

12
Z0
На сайте с 03.09.2009
Online
757
#11
Оптимизайка:
Зависит от СУБД. PostgreSQL, например, умеет. MySQL - нет.

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

Как это не умеет? Массив в ячейку записывается используя mysql serialize, как я и написал выше 🍿

L
На сайте с 07.12.2007
Offline
351
#12
ziliboba0213:
Массив в ячейку записывается используя mysql serialize

Вопрос как по нему делать выборки, кроме как всё поле целиком и десериализация на php?

siv1987
На сайте с 02.04.2009
Offline
427
#13
zilibobой0213:
Как это не умеет? Массив в ячейку записывается используя mysql serialize, как я и написал выше

У mysql нет такой функции serialize, в бд с точки зрения данных вы записываете обычную строку с определенной структурой. Таким же успехом можно создать свою любую структуру для хранения блоков значений - разделенные через запятую и тд.

K
На сайте с 03.06.2015
Offline
45
#14

Тот самый случай когда если сказал никогда - то никогда не захочешь делать запросы на выборку по части такого поля, а прочитать его целиком и разобрать на части вообще не проблема, конечно. Однако как это нередко случается легкость решения соблазняет и многие не выдерживают и вскоре начинают хотеть. Примерно каждый десятый вопрос на sql.ru про то, как сделать выборку по значению "третьего элемента в строке с разделителем труба".

Рел.БД в принципе для таких закидонов не предназначены.

MYSQL PHP JS HTML CSS SEO TXT США СССР
S
На сайте с 19.11.2014
Offline
72
#15
lutskboy:
используйте тип поля enum

И перед каждой записью в таблицу ALTER TABLE :)

S
На сайте с 08.08.2014
Offline
36
#16

храни хоть миллион значенией в json, в чём проблема то конкретно?

конвертируй туда-обратно если недосубд

если postgres там всё это есть

покупаю сдл сайты о собаках и кошках
K
На сайте с 03.06.2015
Offline
45
#17

Конструктивно. Несколько значений для одного поля хранятся в другой таблице с очень простой структурой, table_values:

id --- собственный униключ, автоинкремент, для управления таблицей

pid --- ссылка на id родителя

value --- значение

Фактическое содержание может быть таким

1 23 986

2 23 753

4 12 762

3 23 975

5 25 975

select value from table_values where pid=23;

получили массив всех значений для родителя с ид 23.

Чтобы вывести все эти значения в строку, как бы они там и были записаны (как в вопросе сформулировано), потребуется группировка и конкатенация https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat - эта функция имеет ограничение длины результата до 1000 знаков по дефолту.

В общем если запрашивать по участкам строки не придется, то - пишите в одну строку, а если придется - то скорее всего выборка обломится, значит не пишите в одну строку.

siv1987
На сайте с 02.04.2009
Offline
427
#18
sholomitcky:
храни хоть миллион значенией в json, в чём проблема то конкретно?

Проблема в том, что нафига здесь json когда можно хранить числовые значения через запятую и использовать для поиска FIND_IN_SET?..

K
На сайте с 01.03.2013
Offline
24
#19

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

Это положительно отразится на скорости работы и легкости сопровождения.

Z0
На сайте с 03.09.2009
Online
757
#20

Ladycharm, согласен.

siv1987, да, это php, забыл, каюсь :) У меня, как у недопрограммиста самоучки, все в одну кучу в голове :)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий