@mysql_ru

Страница 93 из 142
Chopko
15.11.2017
19:03:04
i have row "user" in table group "user" have array value = "['1', '55' , '199']" have get all group where in array "55"?

Yaroslav
15.11.2017
19:08:48
where user = 55

Chopko
15.11.2017
19:12:56
user = "['1', '55' , '199']"

или "['55', '234' , '4577']"

Google
Chopko
15.11.2017
19:13:52
нужно найти все где есть в масиве 55

Yaroslav
15.11.2017
19:14:32
where user like '%55%'

Chopko
15.11.2017
19:56:48
а если будет 555

или 1055

Yaroslav
15.11.2017
20:11:44
найдет все, где есть 55

Chopko
15.11.2017
20:15:55
спс

Nazary
16.11.2017
14:41:46
Не добавить ограничения внешнего ключа, выдаёт ошибку #1215 - Cannot add foreign key constraint. Типы полей полностью одинаковые, перепроверил 100 раз.

Внешних же ключей может быть несколько? Просто в таблицах, где хочу ещё по одному добавить, уже есть один внешний по каждому.

Alexey
16.11.2017
14:47:35
причин для этой ошибки может быть много. причину нужно смотреть так:

mysql> pager grep -A 5 FOREIGN

mysql> show engine innodb status;

Yaroslav
16.11.2017
14:51:34
данные правильные?

Dzmitry
16.11.2017
15:50:02
встал вопрос. Как хранить древовидную информацию в базах данных?(простейщий xml, json или любой другой формат) Например данные типа: - Persons: - - id: 1 - - name: "John: - - Age: 26 - - Car: 1 - Cars: - - id: 1 - - type: "audi a4" Собственно должно быть не две таблицы Persons и Cars, а что-то совсем другое, так как данные могут быть другие, и структура другая. Первое что мне пришло в голову это следующие таблицы: Таблица types(id, type_name) Таблица values(id, type_id, value_id) несколько таблиц для типов: Таблица int_values(value_id, value) Таблица string_values(value_id, value) Таблица array_values(value_id, value varchar) и из таблицы array_values из строки извлекаются все внутренние ветки дерева. Но мне что-то подсказывает, что такой способ будет не оптимальным, когда начнется выполнение select/update из приложения. Возможно, нужно будет написать процедур в бд, но пока вопрос не в этом - есть ли способ лучше организовать структуру данных в этом случае?

Google
Yaroslav
16.11.2017
15:51:26
nosql почитай

Nazary
16.11.2017
15:54:51
встал вопрос. Как хранить древовидную информацию в базах данных?(простейщий xml, json или любой другой формат) Например данные типа: - Persons: - - id: 1 - - name: "John: - - Age: 26 - - Car: 1 - Cars: - - id: 1 - - type: "audi a4" Собственно должно быть не две таблицы Persons и Cars, а что-то совсем другое, так как данные могут быть другие, и структура другая. Первое что мне пришло в голову это следующие таблицы: Таблица types(id, type_name) Таблица values(id, type_id, value_id) несколько таблиц для типов: Таблица int_values(value_id, value) Таблица string_values(value_id, value) Таблица array_values(value_id, value varchar) и из таблицы array_values из строки извлекаются все внутренние ветки дерева. Но мне что-то подсказывает, что такой способ будет не оптимальным, когда начнется выполнение select/update из приложения. Возможно, нужно будет написать процедур в бд, но пока вопрос не в этом - есть ли способ лучше организовать структуру данных в этом случае?
Можно работать отдельно с типами в коде, а в базе хранить текстовый.

lost
16.11.2017
15:56:29
как варик, если так уже хочется в mysql - можно почитать интересную статью uber как они schemaless поверх мускуля готовят

Pavel
16.11.2017
15:58:37
А какие способы вы уже рассматривали и какие отвергли и почему? json, nested set, materialized path, etc ?

Dzmitry
16.11.2017
16:07:44
А какие способы вы уже рассматривали и какие отвергли и почему? json, nested set, materialized path, etc ?
Я пока экспериментирую просто. В дальнейшем, если суметь сохранить данные разных типов в неизменной по структуре бд, есть идея хранить также условия, предикаты и атрибуты для значений values в этой же структуре.

Вообще все начинается с того, что существует система мерчендайзинга (сервер+мобильная часть). Система огромна. Она поставляется для нескольких компаний. У каждой компании есть свои требования, и мне, как программисту, пришлось клонировать систему для каждой компании и в каждом клоне дописывать условный код и схему бд. Собственно если бы часть условной логики можно было бы перенести в бд... и для того чтобы условия можно было применять к любым типам данных, данные нужно декомпозировать в простейшие единицы. Не знаю, может это вовсе бред?))

Yaroslav
16.11.2017
16:19:06
nosql почитай
Оно походу

Pavel
16.11.2017
16:23:02
А может просто нужно БД нормально спроектировать, со всеми таблицами, внешними ключами и констрейнтами? )

В общем твой вопрос слишком абстрактный, этим и занимаются архитекторы впринципе. На фуллтайме сидят и рассматривают разные кейсы, беседуют с БА, смотрят, замеры делают.

Dzmitry
16.11.2017
16:27:55
Выкладки, статьи, книги... что угодно)

lost
16.11.2017
16:30:41
у тебя же есть ряд требований к системе, начни с анализа требований

Pavel
16.11.2017
16:32:16
Выкладки, статьи, книги... что угодно)
Затрудняюсь, единственное, насколько я смог понять из объясненей, это не обычный кейс хранения деревьев (типа nested set/adj list) а все же больше случай именно данных с динамической схемой. Значит скорее всего JSON

Dzmitry
16.11.2017
16:37:18
Хорошо, буду копаться, спасибо.

Nazary
16.11.2017
18:30:49
Короче, пересоздал поля по собственноручному запросу, всё пошло, как нужно без ошибок.

Alexey
16.11.2017
18:48:26
тут нужно было внимательно посмотреть на: 1. типы данных в создаваемой и referenced таблицах. 2. индексах в referenced таблице и 3. default collation

раз всё решилось после пересоздания поля, вангую, что поменялась default collation

Nazary
16.11.2017
18:52:14
Google
Yaroslav
16.11.2017
18:59:58
данные были, до пересоздания?

Nazary
16.11.2017
19:03:13
Сергей
17.11.2017
12:49:47
ДОбрый день! Реально ли сделать такой финт на уровне MySQL. При удалении записи в таблице A удалять все записи в таблице Б, где Б.object_id = A.id and Б.object_type = "А" ?

Сергей
17.11.2017
12:58:24
да, через FK
Хм.. как через FK?

Пока пришел к тригерам...

Сергей
17.11.2017
12:58:44
вот для примера CREATE TABLE `reports` ( `id` int(11) NOT NULL AUTO_INCREMENT, `reportid` int(11) DEFAULT NULL, `clientcode` int(11) NOT NULL, `client_id` varchar(50) DEFAULT NULL, `datedeliveri` datetime DEFAULT NULL, `status` varchar(50) DEFAULT NULL, `plateg` varchar(50) DEFAULT NULL, `priceuslug` varchar(50) DEFAULT NULL, `ds` varchar(3) DEFAULT NULL, PRIMARY KEY (`id`), KEY `reportid` (`reportid`), CONSTRAINT `reports_ibfk_1` FOREIGN KEY (`reportid`) REFERENCES `report` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=371 DEFAULT CHARSET=utf8

Сергей
17.11.2017
12:59:08
Б.object_id = A.id and Б.object_type = "А" такой финт FK не сделаешь

Сергей
17.11.2017
13:00:34
CREATE TABLE `report` ( `id` int(11) NOT NULL AUTO_INCREMENT, `companycode` int(11) NOT NULL, `ldtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `companycode` (`companycode`) ) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8 вот если из этой таблицы удалить запись, то в таблице выше удалятся все записи с данным id

Сергей
17.11.2017
13:00:55
Это не то

У меня два столбца, а не один с ID

Сергей
17.11.2017
13:01:38
и?

Сергей
17.11.2017
13:03:10
ну и как сделать FK?? При удалении записи в таблице A удалять все записи в таблице Б, где Б.object_id = A.id and Б.object_type = "А" ?

Сергей
17.11.2017
13:04:00
хочешь удалять только из столбца?

Сергей
17.11.2017
13:05:42
хочу удалять все строки в таблице Б, где Б.object_id = A.id and Б.object_type = "A"

lost
17.11.2017
13:29:19
можешь сделать составной FK, правда для этого необходимо будет, чтобы этот дополнительный атрибут был в обеих таблицах ну или через триггеры, только не забудь, что на каскадных удалениях на дочерних таблицах они не срабатывают

ну и крайний вариант, напиши хранимку

Google
Nazary
17.11.2017
15:32:42
Сталкиваюсь с ошибкой 1452, если пишу просто запрос. Если до и после него поставить SET FOREIGN_KEY_CHECKS, то всё ок, просто первый и третий никак по времени не влияет, если верить отчёту после выполнения запросов. SET FOREIGN_KEY_CHECKS=0; INSERT INTO kuku(id, a, b, c, d) VALUES (1,2,3,4,5); SET FOREIGN_KEY_CHECKS=1; Как избавиться от этого? 1452 — это про внешние ключи. Да, они у меня есть. Всегда такой костыль нужен?

lost
17.11.2017
15:43:22
Может просто в родительскую таблицу сначала добавить значение а не страдать такой херней?

Nazary
17.11.2017
15:45:28
Yaroslav
17.11.2017
15:45:37
забей

lost
17.11.2017
15:45:52
Ок

Yaroslav
17.11.2017
15:47:28
какой запрос делаешь

какие данные в бд

на момент запроса, пусто?

какие типы колонок, обе колонки правильно написаны?

бд на которую ссылаеться существует?

у тебя явно какая-то синтаксическая ошибка

проверь все вышесказанное

данные которые вставляються по ключу, должны быть и в родители, это так?

поле на которое ссылаешься primary key?

скинь запрос на создание таблиц

с ключами

на какой ключ ругается?

Google
Yaroslav
17.11.2017
15:54:38
у тебя поле telegram_id ссылаеться на 5 таблиц с таким полем

это законно?

во всех 5 таблицах, есть значение которое ты вставляешь?

почитай про foreign ключи

тебе нужно ключи с этой таблицы распихать на 5 таблиц

по 1

CONSTRAINT accounts_ibfk_1 FOREIGN KEY (telegram_id) REFERENCES accounts (telegram_id) ON DELETE CASCADE ON UPDATE CASCADE, - этот в request и т.д.

и если ты задал для таблицы, то для полей не надо

CHARSET=latin1 COLLATE=latin1_bin

Страница 93 из 142