powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Множественные ссылки одной таблицы на другую. Как организовать запрос?
4 сообщений из 4, страница 1 из 1
Множественные ссылки одной таблицы на другую. Как организовать запрос?
    #40024670
cnyx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Формулировка в сабже странная, но не знаю, как ее по-другому описать.
Есть две таблицы. Первая с жестко заданными данными
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE IF NOT EXISTS `attributes` (
  `attr_name` varchar(40) NOT NULL default '',
  `attr_num` int(11) NOT NULL default '0',
  UNIQUE KEY `attr_num` (`attr_num`),
  UNIQUE KEY `attr_name` (`attr_name`)
) ENGINE=MyISAM DEFAULT CHARSET=koi8r;

INSERT INTO `attributes` (`attr_name`, `attr_num`) VALUES
('active', 1002),
('batch_id', 323),
('user_contract', 1033);


Вторая
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE IF NOT EXISTS `pin_attributes` (
  `pin_id` int(11) NOT NULL default '0',
  `attr_num` int(11) NOT NULL default '0',
  `attr_val` varchar(40) default NULL,
  UNIQUE KEY `pin_id` (`pin_id`,`attr_num`),
  KEY `pin_id_2` (`pin_id`),
  KEY `attr_num` (`attr_num`)
) ENGINE=MyISAM DEFAULT CHARSET=koi8r;


Таблицы связаны по полю attr_num. Во второй таблице довольно много данных, вот записи для трех pin_id, но по факту их много.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
pin_id	attr_num	attr_val
22875	323	50
22875	1002	1

63840	1033	390
63840	1002	1
63840	323	corp

63843	1033	391
63843	1002	1
63843	323	corp

63844	1033	391
63844	1002	0
63844	323	corp


Задача состоит в том, чтобы выбрать DISTINCT (уникальные) значения attr_val, которое привязано к attr_num=1033 (выбрать номера контрактов).
Но при этом attr_val=1, которое привязано к attr_num=1002 (т.е. услуга активна).
А так же attr_val=corp, которое привязано к attr_num=323 (т.е. выбрать только корпоративных клиентов).
В результате запроса я должен был бы увидеть значения 390 и 391.
Получается мне в одном запросе надо несколько раз связывать эти таблицы с разными условиями attr_val. В голову пока приходят только запросы через временные таблицы: сначала выбираем всех корпоративных во временную таблицу. Потом из временной таблицы выбираем всех корпоративных и активных. А на финальном этапе уже DISTINCT, чтобы повторяющиеся записи убрать. Думаю такое не пройдет. Видимо без обработки через программу (perl, php, etc) не обойтись
...
Рейтинг: 0 / 0
Множественные ссылки одной таблицы на другую. Как организовать запрос?
    #40024693
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо без обработки через программу (perl, php, etc) не обойтись
Пффф...
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT DISTINCT t1.attr_val contract_number
FROM pin_attributes t1
JOIN pin_attributes  t2 USING (pin_id)
JOIN pin_attributes  t3 USING (pin_id)
WHERE (t2.attr_num, t2.attr_val) = (323, 'corp')
  AND (t3.attr_num, t3.attr_val) = (1002, 1)
  AND t1.attr_num = 1033;


fiddle

PS. Можно было бы и для второй таблицы дать INSERT INTO...
...
Рейтинг: 0 / 0
Множественные ссылки одной таблицы на другую. Как организовать запрос?
    #40024701
cnyx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо вам огромное. Даже не думал, что такое возможно.
з.ы.
По INSERT INTO буду иметь в виду, просто в той таблице много записей и я вручную набил несколько для примера. И количество полей в первой таблице сократил, так как они к запросу отношения не имели.
...
Рейтинг: 0 / 0
Множественные ссылки одной таблицы на другую. Как организовать запрос?
    #40024706
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё, что можно руками, можно и программно. Другой вопрос, что не всегда оптимально (это я не про этот случай, а вообще).
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Множественные ссылки одной таблицы на другую. Как организовать запрос?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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