2015-02-17 2 views
1

Я пытаюсь найти лучший способ обновить одно из двух полей в таблице. У меня есть таблица отношений с людьми, и она связывает двух человек, и я хотел бы, чтобы каждый человек мог установить тип отношений на их конце.Mysql: Изменить столбец установки при обновлении?

PersonRelationship Таблица

id int 
user1_id int 
user2_id int 
user1_reltype /* boss, manager, etc */ 
user2_reltype 

В зависимости от того, является ли текущий пользователь является либо user1_id или user2_id в таблице, мне нужно обновить user_reltype соответствующим образом. Поэтому, если текущий userid находится в поле user1_id, обновите user1_reltype, иначе обновите user2_reltype.

+0

У вас есть данные по образцу с вашими ожидаемыми результатами? Я считаю, что их может быть каким-то образом использовать оператор 'CASE' в вашем обновлении, но это поможет провести что-то для проверки, чтобы убедиться, что он делает то, что вам нужно. – AdamMc331

ответ

0

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

-------------------------------------- 
| initiator_id | reltype | target_id | 

Когда человек с идентификатором 5 (далее «Инициатор») отмечает лицо с ID 9 (далее «мишень») в качестве друга, таблица будет содержать:

--------------------------------------- 
| initiator_id | reltype | target_id | 
+--------------+----------+-----------+ 
|   5 | 'friend' |   9 | 

Если человек-позже инициирует соединение «босс» с лицом 5, запись может быть создана без вмешательства в строке ранее созданной лицо 5:

-------------------------------------- 
| initiator_id | reltype | target_id | 
+--------------+---------+_----------+ 
|   9 | 'boss' |   5 | 

Этот подход облегчит чтение вашей таблицы, и ваши запросы будут легко писать.

Extra:

Если вы не уже есть, рассмотреть вопрос о создании еще одной таблицы для отслеживания типов отношений ('reltype'):

----------------- 
| id | type  | 
+----+----------+ 
| 1 | 'friend' | 
| 2 | 'boss' | 

и заменить строку reltype содержащемуся в таблице отношений с внешними ключами.

--------------------------------------- 
| initiator_id | reltype | target_id | 
+--------------+----------+-----------+ 
|   5 |  1 |   9 | 
|   9 |  2 |   5 | 
+0

Моя единственная проблема с этим подходом заключается в выборе списка отношений для пользователя. Я должен был бы сделать только одну уникальную запись, потому что теперь одна связь состоит из двух строк. – Ralph

+0

Если каждый конец может управлять типом отношений, не будет ли у каждого пользователя две потенциальные отношения с каждым человеком? Есть тот, который они инициируют, и «входящие» отношения с другим человеком. –

+0

Я просто думаю о том, как избежать дублирования списков, когда я вытащил список отношений для пользователя. Прямо сейчас, если я сделал SELECT * FROM personrelationship WHERE initator_id =: current_user ИЛИ target_id: current_user, он дважды перечислил бы отношения. – Ralph