Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте, не могу связать правильно таблицы. Суть такова: Пользователь, представитель фирмы, авторизуется н асайте и получает возможность редактировать данные о своей фирме. Но администратор сайта должен просмотреть изменеия и отредактировать их. Для этого созданы временный таблицы, куда заносятся пользовательские данные. Всего временных таблиц 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`
Но проблема в том, что если хотябы одна таблица пуста, то ничего не выбирается.
Прошу помощи.
Неактивен
Умножение на ноль есть ноль. Вы используете прямое произведение таблиц, т.е. для каждой строки первой таблицы выбираете все строки из другой. Если одна из таблиц пуста, то ничего и не будет выбрано.
В вашем случае нужно сделать несколько запросов. Результат можно объединить с помощью union(автоматически удаляет дубликаты)
Неактивен
Это помогло. Спасибо большое. Создал аналогичные темы ещё на трёх форумах. только ваш вариант оказался рабочим, за что отдельный респект. Накоец-то ушла эта головная боль.
Неактивен