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

12
M
На сайте с 01.10.2014
Offline
61
1781

Всем привет. Возможно ли как-нибудь в одном поле таблицы бд хранить несколько числовых значений? Если да, то как это делается и как потом можно выбрать отдельно каждое значение из поля?

Лучшая вап клик пп для выкупа подписок (https://mcwap.ru/?r=1153)
X
На сайте с 02.08.2014
Offline
67
#1

1 поле - 1значение. Не понятно зачем так делать, но like вам в помощь

Парсер тубов (https://xoo.pw/3-tubes-clip-one.html)
Z0
На сайте с 03.09.2009
Offline
757
#2

serialize 🍿

Оптимизайка
На сайте с 11.03.2012
Offline
396
#3
mortido:
Всем привет. Возможно ли как-нибудь в одном поле таблицы бд хранить несколько числовых значений? Если да, то как это делается и как потом можно выбрать отдельно каждое значение из поля?

Зависит от СУБД. PostgreSQL, например, умеет. MySQL - нет.

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

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
L
На сайте с 07.12.2007
Offline
351
#4
mortido:
Если да, то как это делается и как потом можно выбрать отдельно каждое значение из поля?

Записываете в текстовое поле значения через любую "нецифру": '#15#55#-88#' и потом выбираете запросом ИмяПоля LIKE '%#15#%'.

Такая "денормализация" имеет смысл, только если значение(и выборок по ним) - не много.

A
На сайте с 04.11.2007
Offline
89
#5
mortido:
... как потом можно выбрать отдельно каждое значение из поля?

Как вариант - substr() или substring(), которые быстрее like.

L
На сайте с 07.12.2007
Offline
351
#6
mortido:
Если да, то как это делается и как потом можно выбрать отдельно каждое значение из поля?

Записываете в текстовое поле значения через любую "нецифру": '#15#55#-88#' и потом выбираете запросом ИмяПоля LIKE '%#15#%'.

Такая "денормализация" имеет смысл, только если значение(и выборок по ним) - не много.

Или выбираете всё поля и на php делаете $arr = explode('#', $row['ИмяПоля']), но надо убирать пустые поля от крайних #.

R
На сайте с 20.02.2015
Offline
59
#7
asteroid:
Как вариант - substr() или substring(), которые быстрее like.

regexp

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

В одном поле возможно хранить несколько значений, значение которых по отдельности не имеет значения. Например так можно хранить имена файлов картинок товара с разделителем из запрещенного в именах файлов символе. Теоретически можно и описание туда засунуть - через еще один разделитель, но практически при таком хранении описаний не будет.

MYSQL PHP JS HTML CSS SEO TXT США СССР
lutskboy
На сайте с 22.11.2013
Offline
172
#9

используйте тип поля enum

S
На сайте с 13.10.2014
Offline
171
#10

Легко.

допустим, вы знаете, что максимум у вас число 16 бит 0-65535 или 0 - ffff

тогда, если у вас поле в 64 бита, то там можно положить сразу 4 значения

как пример у вас 4 цифры

0 - 1045;

1 - F0FA'

2 - A012

4 - 0000

тогда упакованное поле примет вид

a012F0FA1045

для экстракта можно пользовать MID(str,pos,len)

кстати, это типичный способ сохранения данных для SIMD инструкций, например SSE2 только поле там не 64 бита, а 128 а сами числа как правило 64 битные

12

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