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

start [/forum/topic.php?fid=47&msg=39244460&tid=1831732]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
150ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 457ms |

| 0 / 0 |
