SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 07.02.2009 00:59:21

NCIAC
Участник
Зарегистрирован: 07.02.2009
Сообщений: 7

Объединение таблиц

Здравствуйте, не могу связать правильно таблицы. Суть такова: Пользователь, представитель фирмы, авторизуется н асайте и получает возможность редактировать данные о своей фирме. Но администратор сайта должен просмотреть изменеия и отредактировать их. Для этого созданы временный таблицы, куда заносятся пользовательские данные. Всего временных таблиц 3:

//таблица фирм:
CREATE TABLE `firms` (
`id` int(25) NOT NULL auto_increment,
`name` varchar(100) default NULL,
- - -
PRIMARY KEY (`id`)
)

//временная таблица фирм
CREATE TABLE `temp_firms` (
`id` int(25) NOT NULL auto_increment,
`id_orig` int(25) default NULL,
`name` varchar(255) NOT NULL,
- - -
PRIMARY KEY (`id`)
)

//если у фирмы есть дополнительный адрес, то его id из таблицы temp_dopa присутствует в этой промежуточной таблице:
CREATE TABLE `temp_firms_dop` (
`id` int(255) NOT NULL auto_increment,
`firms_id` int(255) NOT NULL,
`dopf_id` int(255) NOT NULL,
PRIMARY KEY (`id`)
)

//фирма состоит в какой-то категории (одной или нескольких) и если пользователь поменял информацию о "категорийности" своей фирмы, то в данной таблице создаются записи о категоряях:
CREATE TABLE `temp_podcat_firms` (
`id` int(255) NOT NULL auto_increment,
`podcat_id` int(255) NOT NULL,
`firms_id` int(255) NOT NULL,
PRIMARY KEY (`id`)
)

По воле обстоятельств создалась необходимость узнать id фирмы, бля которой были сделаны какие-то изменения (изменения в осн. таблице, в таблице категорий или доп. адреса). Делаю след. запрос:
SELECT DISTINCT `firms`.`id`, `firms`.`name`
FROM `firms`, `temp_firms`, `temp_firms_dop`, `temp_podcat_firms`
WHERE `firms`.`id`=`temp_podcat_firms`.`firms_id`
OR `firms`.`id`=`temp_firms`.`id_orig`
OR `firms`.`id`=`temp_firms_dop`.`firms_id`
Но проблема в том, что если хотябы одна таблица пуста, то ничего не выбирается.
Прошу помощи.

Неактивен

 

#2 07.02.2009 13:40:36

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5831

Re: Объединение таблиц

Умножение на ноль есть ноль. Вы используете прямое произведение таблиц, т.е. для каждой строки первой таблицы выбираете все строки из другой. Если одна из таблиц пуста, то ничего и не будет выбрано.

В вашем случае нужно сделать несколько запросов.  Результат можно объединить с помощью union(автоматически удаляет дубликаты)


SELECT `firms`.`id`, `firms`.`name` FROM `firms`, `temp_firms` WHERE `firms`.`id`=`temp_firms`.`id_orig`  union
SELECT `firms`.`id`, `firms`.`name` FROM `firms`, `temp_firms_dop` WHERE `firms`.`id`=`temp_firms_dop`.`firms_id` union
SELECT `firms`.`id`, `firms`.`name` FROM `firms`, `temp_podcat_firms` WHERE `firms`.`id`=`temp_podcat_firms`.`firms_id`;
 

Неактивен

 

#3 08.02.2009 15:20:01

NCIAC
Участник
Зарегистрирован: 07.02.2009
Сообщений: 7

Re: Объединение таблиц

Это помогло. Спасибо большое. Создал аналогичные темы ещё на трёх форумах. только ваш вариант оказался рабочим, за что отдельный респект. Накоец-то ушла эта головная боль.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson