
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
27.05.2016, 02:47
|
|||
|---|---|---|---|
|
|||
Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице |
|||
|
#18+
Здравствуйте, имеются 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 Но все равно не могу сообразить как это сделать, подскажите пожалуйста! (Важно сделать выборку одним запросом) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2016, 04:33
|
|||
|---|---|---|---|
Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице |
|||
|
#18+
Вытащить последние 10 элементов - читать про reverse, locate, substring Взять отдельный элемент (и субэлемент) - читать про substring_index там же. Прицепить данные из других таблиц - читать про JOIN. Прицепить данные из других таблиц с неопределёнными именами - читать про prepared statements, а лучше выдернуть руки проектировщика оттуда, откуда они у него растут, и поставить туда, откуда они растут у нормальных людей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2016, 08:31
|
|||
|---|---|---|---|
|
|||
Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице |
|||
|
#18+
alpha348, интересно это реальная задача или шутка преподавателя.... А количество пар значений в строке (как и полей в табл 2 и 3) я так понимаю все же конкретное число? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2016, 17:34
|
|||
|---|---|---|---|
Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице |
|||
|
#18+
alpha348, имеются 3 таблицы. В таблице 1 в текстовом поле(utf8_general_ci) хранится массив, каждый элемент разделен на 2 части двоеточием. 1я часть это id из таблицы 2, 2я часть это id из таблицы 3. (Важно сделать выборку одним запросом) Вот с этого место поподробнее... Хранение массива в поле - это нарушение 1НФ, грубая ошибка в проектировании. Конечно, тебя не расстреляют, но одним запросом это никак не сделать, тем более что в MySQL не придерживаються массивы внутри СУБД... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2016, 18:05
|
|||
|---|---|---|---|
Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице |
|||
|
#18+
А что мешает пойти по пути нормализации первой таблицы? отконвертировать её во вменяемы формат, а потом простейшими запросами получать требуемое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2016, 18:33
|
|||
|---|---|---|---|
|
|||
Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице |
|||
|
#18+
MasterZiv[ Хранение массива в поле - это нарушение 1НФ, грубая ошибка в проектировании. Конечно, тебя не расстреляют, но одним запросом это никак не сделать, тем более что в MySQL не придерживаються массивы внутри СУБД... 1) не обязательно, может в базе хранится именно последовательность? 2) через рег. выражения могло бы и получится (join делать по регулярке) 3) но на начальном этапе я бы сняла ограничение одного запроса :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.05.2016, 20:52
|
|||
|---|---|---|---|
Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице |
|||
|
#18+
mini.weblabMasterZiv[ Хранение массива в поле - это нарушение 1НФ, грубая ошибка в проектировании. Конечно, тебя не расстреляют, но одним запросом это никак не сделать, тем более что в MySQL не придерживаються массивы внутри СУБД... 1) не обязательно, может в базе хранится именно последовательность? там вроде все описано, все однозначно плохо. 2) через рег. выражения могло бы и получится (join делать по регулярке) убить производительность на корню? ну, для 1000 записей работать будет, да.. 3) но на начальном этапе я бы сняла ограничение одного запроса :) я кстати подумал как можно сделать, идея безумная, но очень прикольная, и реляционная на 100%, потом напишу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.05.2016, 10:03
|
|||
|---|---|---|---|
Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице |
|||
|
#18+
MasterZivно одним запросом это никак не сделатьЕсли известно максимальное количество элементов в поле, то можно. И регулярки для этого не нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.05.2016, 10:15
|
|||
|---|---|---|---|
Сделать выборку из 3 таблиц одним запросом используя массив находящийся в первой таблице |
|||
|
#18+
Регулярки тут вообще ни к месту - всё равно ими не получится выкроить кусок из значения поля для дальнейшей обработки. А если в запрос воткнуть синтетическую таблицу, производящую числа от 1 до 10, то вполне хватит и встроенных текстовых функций. А о производительности на такой структуре заикаться можно даже не начинать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=47&mobile=1&tid=1831732]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
196ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 527ms |

| 0 / 0 |
