Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2015, 22:55   #1
miragex
Пользователь
 
Регистрация: 11.06.2012
Сообщений: 10
По умолчанию Поиск REGEXP с объединением таблиц

Доброй ночи
Прошу помощи!

--
-- Структура таблицы `products`
--
Код:
CREATE TABLE IF NOT EXISTS `products` (
`id` INT(3) UNSIGNED NOT NULL,
  `key` VARCHAR(40) NOT NULL,
  `title` VARCHAR(50) NOT NULL,
  `description` VARCHAR(60) DEFAULT NULL,
  `owned` INT(2) UNSIGNED NOT NULL,
  `sub_owned` INT(2) DEFAULT NULL,
  `labels` SET('hit','vegan') DEFAULT NULL,
  `price` INT(4) NOT NULL,
  `composition` VARCHAR(250) DEFAULT NULL,
  `weight` VARCHAR(15) DEFAULT NULL,
  `calories` VARCHAR(20) DEFAULT NULL
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=126 ;
--
-- Структура таблицы `contents`
--
Код:
CREATE TABLE IF NOT EXISTS `contents` (
`id` INT(2) UNSIGNED NOT NULL,
  `key` VARCHAR(20) NOT NULL,
  `title` VARCHAR(20) NOT NULL,
  `included` enum('on','off') NOT NULL DEFAULT 'off'
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;
--
-- Структура таблицы `sub_contents`
--
Код:
CREATE TABLE IF NOT EXISTS `sub_contents` (
`id` INT(2) NOT NULL,
  `key` VARCHAR(20) NOT NULL,
  `title` VARCHAR(30) NOT NULL,
  `owned` INT(2) NOT NULL,
  `included` enum('on','off') NOT NULL DEFAULT 'on'
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
products - главная таблица
=> owned - содержит id из contents.id
=> sub_owned - содержит id из sub_contents.id

Подскажите как создать запрос чтобы в:
1.)
products.owned содержал contents.title
products.sub_owned содержал sub_contents.title
2.)
и после всех этих действий выполнить запрос:
Код:
SELECT * FROM products WHERE 
`composition` REGEXP '(огурец|суши|cola)' OR 
`description` REGEXP '(огурец|суши|cola)' OR 
`title` REGEXP '(огурец|суши|cola)' OR 
`owned` REGEXP '(огурец|суши|cola)' OR 
`sub_owned` REGEXP '(огурец|суши|cola)'
Спасибо

Последний раз редактировалось Stilet; 30.05.2015 в 23:27.
miragex вне форума Ответить с цитированием
Старый 31.05.2015, 13:02   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
SELECT * FROM 
(SELECT p.*, c.title AS content, s.title AS subcontent
FROM products p
JOIN contents c ON p.owned=c.id
JOIN sub_contents s ON p.sub_owned=s.id) prod
WHERE 
prod.composition REGEXP '(огурец|суши|cola)' OR 
prod.description REGEXP '(огурец|суши|cola)' OR 
prod.title REGEXP '(огурец|суши|cola)' OR 
prod.content REGEXP '(огурец|суши|cola)' OR 
prod.subcontent REGEXP '(огурец|суши|cola)'
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 31.05.2015 в 17:25.
Sciv вне форума Ответить с цитированием
Старый 31.05.2015, 22:26   #3
miragex
Пользователь
 
Регистрация: 11.06.2012
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Код:
SELECT * FROM 
(SELECT p.*, c.title AS content, s.title AS subcontent
FROM products p
JOIN contents c ON p.owned=c.id
JOIN sub_contents s ON p.sub_owned=s.id) prod
WHERE 
prod.composition REGEXP '(огурец|суши|cola)' OR 
prod.description REGEXP '(огурец|суши|cola)' OR 
prod.title REGEXP '(огурец|суши|cola)' OR 
prod.content REGEXP '(огурец|суши|cola)' OR 
prod.subcontent REGEXP '(огурец|суши|cola)'
Пробую как Вы написали - ничего не выводит

Спасибо
miragex вне форума Ответить с цитированием
Старый 01.06.2015, 03:09   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

С REGEXP не работал, но если мне память не изменяет, там вроде не используется WHERE? То есть запрос для регекспа выглядит примерно так:

Код:
SELECT 'Hello World' REGEXP ('Hello|World')
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 01.06.2015 в 03:11.
Sciv вне форума Ответить с цитированием
Старый 01.06.2015, 08:37   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
SELECT p.*,c.title as ownedtitle,s.title as sub_contentstitle
  FROM contents c,products p
    left join sub_contents s on s.id=p.sub_owned
  WHERE p.owned=C.ID AND
        (p.`composition` REGEXP '(огурец|суши|cola)' OR
         p.`description` REGEXP '(огурец|суши|cola)' OR
         p.`title` REGEXP '(огурец|суши|cola)' OR
         c.title REGEXP '(огурец|суши|cola)' OR
         s.title REGEXP '(огурец|суши|cola)')
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли с помощью REGEXP осуществлять регистронезависимый поиск? Microplankton SQL, базы данных 8 03.03.2015 11:10
Поиск тегов. RegExp soonner JavaScript, Ajax 1 14.09.2013 14:28
Запрос с объединением J4SSektor SQL, базы данных 4 08.04.2013 15:19
Запрос с объединением таблиц vedro-compota SQL, базы данных 6 28.12.2010 12:57
Grid с объединением ячеек... Roof Компоненты Delphi 12 02.10.2009 13:19