Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице / 9 сообщений из 9, страница 1 из 1
27.05.2016, 02:47
    #39244454
alpha348
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице
Здравствуйте, имеются 3 таблицы. В таблице 1 в текстовом поле(utf8_general_ci) хранится массив, каждый элемент разделен на 2 части двоеточием. 1я часть это id из таблицы 2, 2я часть это id из таблицы 3.
[img='Mysql.jpg']
Нужно сделать выборку одним запросом из трех таблиц, данные из таблицы 2 и таблицы 3, должны соответствовать последним 10 элементам массива поля array. Название таблицы 3 может быть разным т.е. вместо таблицы 3 будет несколько таблиц одинаковой структуры.
Вот что нашёл по данному вопросу:
http://vexell.ru/2010/10/mysql-implode-explode/
http://stackoverflow.com/questions/5928599/equivalent-of-explode-to-work-with-strings-in-mysql
Но все равно не могу сообразить как это сделать, подскажите пожалуйста!
(Важно сделать выборку одним запросом)
...
Рейтинг: 0 / 0
27.05.2016, 04:33
    #39244460
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице
Вытащить последние 10 элементов - читать про reverse, locate, substring
Взять отдельный элемент (и субэлемент) - читать про substring_index там же.
Прицепить данные из других таблиц - читать про JOIN.
Прицепить данные из других таблиц с неопределёнными именами - читать про prepared statements, а лучше выдернуть руки проектировщика оттуда, откуда они у него растут, и поставить туда, откуда они растут у нормальных людей.
...
Рейтинг: 0 / 0
27.05.2016, 08:31
    #39244505
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице
alpha348,

интересно это реальная задача или шутка преподавателя....

А количество пар значений в строке (как и полей в табл 2 и 3) я так понимаю все же конкретное число?
...
Рейтинг: 0 / 0
27.05.2016, 17:34
    #39245208
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице
alpha348, имеются 3 таблицы. В таблице 1 в текстовом поле(utf8_general_ci) хранится массив, каждый элемент разделен на 2 части двоеточием. 1я часть это id из таблицы 2, 2я часть это id из таблицы 3.

(Важно сделать выборку одним запросом)

Вот с этого место поподробнее...

Хранение массива в поле - это нарушение 1НФ, грубая ошибка в проектировании. Конечно, тебя не расстреляют, но одним запросом это никак не сделать, тем более что в MySQL не придерживаються массивы внутри СУБД...
...
Рейтинг: 0 / 0
27.05.2016, 18:05
    #39245230
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице
А что мешает пойти по пути нормализации первой таблицы? отконвертировать её во вменяемы формат, а потом простейшими запросами получать требуемое.
...
Рейтинг: 0 / 0
27.05.2016, 18:33
    #39245246
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице
MasterZiv[
Хранение массива в поле - это нарушение 1НФ, грубая ошибка в проектировании. Конечно, тебя не расстреляют, но одним запросом это никак не сделать, тем более что в MySQL не придерживаються массивы внутри СУБД...
1) не обязательно, может в базе хранится именно последовательность?
2) через рег. выражения могло бы и получится (join делать по регулярке)
3) но на начальном этапе я бы сняла ограничение одного запроса :)
...
Рейтинг: 0 / 0
27.05.2016, 20:52
    #39245311
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице
mini.weblabMasterZiv[
Хранение массива в поле - это нарушение 1НФ, грубая ошибка в проектировании. Конечно, тебя не расстреляют, но одним запросом это никак не сделать, тем более что в MySQL не придерживаються массивы внутри СУБД...
1) не обязательно, может в базе хранится именно последовательность?


там вроде все описано, все однозначно плохо.

2) через рег. выражения могло бы и получится (join делать по регулярке)

убить производительность на корню?
ну, для 1000 записей работать будет, да..

3) но на начальном этапе я бы сняла ограничение одного запроса :)

я кстати подумал как можно сделать, идея безумная, но очень прикольная, и реляционная на 100%, потом напишу...
...
Рейтинг: 0 / 0
30.05.2016, 10:03
    #39245955
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице
MasterZivно одним запросом это никак не сделатьЕсли известно максимальное количество элементов в поле, то можно. И регулярки для этого не нужны.
...
Рейтинг: 0 / 0
30.05.2016, 10:15
    #39245968
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице
Регулярки тут вообще ни к месту - всё равно ими не получится выкроить кусок из значения поля для дальнейшей обработки. А если в запрос воткнуть синтетическую таблицу, производящую числа от 1 до 10, то вполне хватит и встроенных текстовых функций. А о производительности на такой структуре заикаться можно даже не начинать.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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