Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
 Аватар для Warship
2 / 2 / 0
Регистрация: 16.07.2010
Сообщений: 55

JOIN таблицы по текстовому полю

23.07.2013, 10:34. Показов 3545. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток.

Вопрос следующий:
Есть три таблицы: orders, users и items.
Orders связана с users по orders.userId = users.id. Соответственно, при запросе к orders информация из users подтягивается по JOIN - никаких проблем.

Но в таблице orders есть поле items (TEXT) - через запятую содержит идентификаторы, по которым нужно подтягивать данные из таблицы items. Т.е. поле orders.items может иметь следующий вид: "1, 22, 39", каждая цифра - идентификатор для таблицы items.
Как правильно подтянуть соответствующие данные из таблицы items? Видится такой вариант: сперва запрос к orders, дабы не трогая таблицу items получить список заказов. Потом для каждого заказа парсинг поля items и запрос к таблице items на основе распарсенных данных. Но по производительности это ппц Какие еще есть варианты?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.07.2013, 10:34
Ответы с готовыми решениями:

Выборка по текстовому полю
Добрый вечер. Ищу по полю, к-рое varchar и НУЛЛ по дефолту: WHERE clients.street IN (SELECT dir_street.id FROM dir_street WHERE...

Множественный фильтр по текстовому полю
Привет специалистам! Есть таблица в БД MySQL с текстовым полем complete. В этом поле хранится массив чисел в JSON, напр: или , если...

Сортировка по текстовому полю
Помогите плиз, кто может! Есть таблица с полями: INT id VARCHAR author VARCHAR title TEXT content INT genre Вывод...

4
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
23.07.2013, 10:57
Хранить несколько id через запятую в текстовом поле - это не по реляционному Фэнь-Шую
Лучше хранить в отдельной таблице каждый id в своей строке. Тогда никаких проблем с построением запросов не будет
0
 Аватар для Warship
2 / 2 / 0
Регистрация: 16.07.2010
Сообщений: 55
23.07.2013, 14:43  [ТС]
Цитата Сообщение от Grossmeister Посмотреть сообщение
Лучше хранить в отдельной таблице каждый id в своей строке. Тогда никаких проблем с построением запросов не будет
Как это? Дело в том, что там количество энтих ID может быть переменным, от 1 и до бесконечности. Или я не вполне понимаю, о чем речь Не могли бы какой-нибудь небольшой пример показать?
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
23.07.2013, 15:05
Заводишь таблицу
userid -- ссылка на таблицу orders
itemid -- ссылка на таблицу items

Соответственно, было для userid = 10 двадцать ссылок на items - будет 20 строк в этой таблице
0
 Аватар для Warship
2 / 2 / 0
Регистрация: 16.07.2010
Сообщений: 55
24.07.2013, 03:43  [ТС]
Ок, спасибо, так и сделаю.

Добавлено через 11 часов 59 минут
Появился еще вопрос.

Сделал, как сказано выше, используя дополнительную таблицу `itemslist`. В ней два поля: `orderId` и `itemId`
Соотв. для order.id = 10 может быть выбрано несколько строк из таблицы `itemslist`

Запрос такой:
MySQL
1
2
3
4
5
6
SELECT `orders` . *, `orders`.`id` AS `order_id`,  `users` . *, `itemslist`.`itemId`, `items`.*
FROM `orders` 
LEFT JOIN `users` ON ( `users`.`id` = `orders`.`userId` ) 
LEFT JOIN `itemslist` ON (`itemslist`.`orderId` = `orders`.`id`)
LEFT JOIN `items` ON (`items`.`id` = `itemsList`.`itemId`)
WHERE `orders`.`id` IS NOT NULL LIMIT 0, 10
Соответственно, данные о товарах (items) он подтягивает, но в две строки. А нужно, чтобы была одна строка (запрос к таблицу `orders` = сам заказ то один), в которой в виде какого-нибудь массива были данные о товарах (items). Это реально как-нибудь сделать?
Вариант перебирать данные после выборки на PHP не рассматривается - там листалка страниц идет (LIMIT 0,10 которая), ее после этого хрен восстановить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.07.2013, 03:43
Помогаю со студенческими работами здесь

Select по текстовому полю
Здравствуйте! Подскажите, пожалуйста правильна ли эта конструкция вывода из БД по текстовому полю? String PoleSQL; TEdit *FilterEdit =...

Выборка по текстовому полю
Добрый день, подскажите как осуществить выборку по текстовому полю, тип "з-з 125/14", "з-з 123456", "з-з...

Запрос к текстовому полю в БД
Есть столбец "TimeCode" в БД. Столбец в тексовом типе. Поиск веду по наличию в нем значения равного переменной "T". ...

Запросы по текстовому полю
Пытаюсь создать запрос по маске "*", который бы находил все записи БД. То есть в искомом текстовом поле находил не только заполненные,...

Обращение к текстовому полю
Есть форма с текстовым полем: <form id="form"> <input type="text" id="txt"> </form> Я могу обратится к содержимому текстового поля...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru