2009-04-13 3 views
2

У меня есть таблица, называемая аукционами, которая имеет различные столбцы, такие как имя пользователя, идентификатор аукциона (первичный ключ), имя, фамилия, местоположение и т. Д., А также категорию колонка. По умолчанию столбец категории пуст, если он не заполняется для конкретной записи пользователем.sql insert and update question..multiple query в одном заявлении

Я создал таблицу новых пользователей, в которой есть столбцы имени пользователя и категории, а также дополнительные поля, которые будут заполняться с помощью ввода пользователем.

Я хотел бы знать, возможно ли при обновлении записи в таблице аукционов иметь категорию, чтобы вставить имя пользователя и категорию из этой записи в таблицу пользователей, если имя пользователя еще не присутствует в Таблица.

Например, если у меня есть следующие таблицы:

auctions 

auctionid username firstname lastname category 
------------------------------------------------------------------------ 
1  zerocool john  henry  
2  fredflint fred  smith  
3  azazal  mike  cutter 

Затем, после обновления второй записи, чтобы иметь в категоризации, как так:

2  fredflintsoner fred  smith  shoes 

В результате пользователей таблица должна быть:

users 

username shoes pants belts misc1 misc2 
-------------------------------------------------- 
fredflint true  

Поскольку никакой записи не было ранее.

Если дополнительные аукционы существуют с тем же именем в таблице аукционов, таких как:

7  fredflint fred  smith belts 

Тогда даже если этот аукцион добавляется к категории, новая запись не должна быть установлена ​​в таблице пользователей, как имя пользователя уже, однако она должна обновляться по мере необходимости, в результате чего:

username shoes pants belts misc1 misc2 
-------------------------------------------------- 
fredflint true  true 

ответ

2

Что вы ищете известен как TRIGGER. Вы можете указать что-нибудь для запуска после каждой вставки/обновления в таблице аукционов, а затем определить, что делать с таблицей пользователей.

1

Пара вопросов приходит на ум. Во-первых, ваша пользовательская таблица выглядит денормализованной. Что происходит, когда вы добавляете новую категорию? Рассмотрим таблицу пользователей в виде:

id username category 

Где у вас есть несколько строк, если пользователь имеет несколько категорий:

1 fredflint shoes 
2 fredflint pants 
.... 

Второй вопрос у меня есть, зачем вам нужна таблица пользователей в все? Похоже, что вся информация в пользовательской таблице уже хранится в таблице аукциона! Вы можете получить пользовательскую таблицу просто:

select distinct username, category 
from auctions 

Если вам нужна отдельная таблица, возможность вручную обновить таблицу, когда вы создаете новый аукцион.Я бы сделать это так (я знаю достаточно о триггерами, чтобы избежать их):

1 - Убедитесь, что есть строка для этого пользователя

if not exists (select * from users where username = 'fredflint') 
     insert into users (username) values ('fredflint') 

2 - Убедитесь в том, что категория обуви

if not exists (select * from users where username = 'fredflint' and shoes = 1) 
     update users set shoes = 1 where username = 'fredflint' 
+0

Мне нужна таблица пользователей для дополнительного ввода пользователем информации о пользователях, совершающих аукционы. Таблица моих пользователей будет иметь столбцы для каждой из категорий, а не отдельную запись для каждой категории. – 2009-04-13 20:41:10

+0

«Таблица моих пользователей будет иметь столбцы для каждой категории, а не отдельную запись для каждой категории» - рассмотрите последствия этого. Взгляните на способ достижения той же цели с нормализованными наборами данных. – Karl

+0

Каковы последствия этого? он является самым эффективным и работает наилучшим образом для моих потребностей, как я его вижу ...., имея записи mnay с тем же именем пользователя, может привести к хаосу. – 2009-04-14 00:04:43