2016-07-22 2 views
1

У меня есть три таблицы.
первая таблица tbl_user
Обновить две или более таблицы

 
id u_name p_list 
1 demo1 1,3, 
2 demo2 4,3,1, 
3 demo3 2,3, 
4 demo4 2,5, 

Вторая таблица tbl_product

 
id product_name 
1 example1 
2 example2 
3 example3 
4 example4 
5 example5
третья таблица tbl_order_list, которые показывают список того, для пользователей. TBL выглядеть
 
id pid uid 
1 1 1,2, 
2 4 2, 
3 3 1,2,3, 
4 5 4, 
теперь я хочу , если я буду обновлять TBL пользователя означает, что если я удалю PID из столбца p_list из tbl_user чем tbl_user будет обновляться, а также tbl_order_list является обновление

«Пример», если я удалю 3 в p_list ид 2 из tbl_user чем таблицы выглядеть

 
id u_name p_list 
1 demo1 1,3, 
2 demo2 4,1, //(pid =3 is remove of demo2) 
3 demo3 2,3, 
4 demo4 2,5, 
И tbl_order_list будет выглядеть
 
id pid uid 
1 1 1,2, 
2 4 2, 
3 3 1,3, //(uid =2 is remove) 
4 5 4, 

, что является решением этой проблемы. Я хочу также, если я снова добавлю pid = 3 в p_list id = 2 пользователя таблицы, чем таблица выглядит как предыдущие таблицы.

QUERY (Из комментариев)

mysql_query("UPDATE tbl_user SET u_name='$userName',slug='$userSlug',password='$userPassword',email='$use‌​rEmail',role='$userRole',p_list='$userList',status='$userStatus',modified_‌​date='$userDate' WHERE id='$uId'"); 

Help Me

+0

Пожалуйста POST Ваш запрошенный запрос. Мы не собираемся писать запрос с SCRATCH. –

+0

'mysql_query (« UPDATE 'tbl_user' SET u_name' = '$ userName',' slug' = '$ userSlug', 'password' = '$ userPassword',' email' = '$ userEmail', 'role' = ' $ userRole ', 'p_list' =' $ userList ',' status' =' $ userStatus ', 'modified_date' =' $ userDate 'WHERE' id' =' $ uId '");' –

+1

Вы действительно должны взглянуть в дизайне вашего стола ... Похоже, вы должны его нормализовать. Подробнее об этом читайте здесь: https://en.m.wikipedia.org/wiki/Database_normalization – FMashiro

ответ

0

До сих пор я не вижу никакой реальной корреляции с PHP, но независимо от того.

Я бы очень предложил, используя обычную форму (см. Нормализацию базы данных) и дедуплицировать данные. tbl_order_list - очень плохая таблица, как и tbl_user. tbl_order_list не должен иметь поля id, поле uid должно содержать ровно один uid, а первичный ключ должен быть (pid, uid) (так что оба поля). К этому моменту его следует называть tbl_order. Если вы хотите получить список всех PIDs для UID или всех жидкостей для ФИДА - в каком-то момент - вы можете запросить так:

SELECT GROUP_CONCAT(uid) 
FROM tbl_order 
WHERE pid=[your pid of interest] 
GROUP BY pid 

и наоборот (заменить идентификатор пользователя с PID и PID с идентификаторами). Если вы хотите запросить его в то же время с остальной частью вашего UserData:

SELECT u.*, GROUP_CONCAT(o.pid) 
FROM tbl_user u 
LEFT JOIN tbl_order o ON (u.id=o.uid) 
[WHERE u.id=[your uid of interest]] 
GROUP BY u.id 

(а так же с tbl_product).

При использовании MySQL> = 5.7 вы можете создать вид:

CREATE VIEW tbl_order_list AS SELECT pid, GROUP_CONCAT(uid) FROM tbl_order GROUP BY pid. 

Добавление или удаление порядка затем приведет к удалению/вставки строки в tbl_order.

Резюме: Сделать таблицу tbl_order (uid, pid), которая содержит ссылки между uids и pids (по одной ссылке на строку). Присоединитесь к этой таблице, когда вам понадобятся ссылки. Пожалуйста, не сохраняйте «ссылки» в виде списка с разделителями-запятыми в поле строки, если не существует очень очень веской причины.

Если у вас есть очень веская причина, подумайте о добавлении запятой (,) в начало и конец ваших списков.Итак:

id pid uid 
1 1 ,1,2, 
2 4 ,2, 
3 3 ,1,2,3, 
4 5 ,4, 

Таким образом, вы можете смело искать, добавлять, удалять записи:

SELECT * FROM tbl_order_list WHERE uid LIKE '%,[uid of interest],%' 
UPDATE tbl_order_list SET uid=CONCAT(uid,',',[uid to add]) WHERE id=[order to update] 
UPDATE tbl_order_list SET uid=REPLACE(",[uid to remove],",",",uid) WHERE id=[order to update] 

(и аналогично для tbl_user, если вы запрашиваете ПИД- в списке tbl_order, падение идентификатор поле.)

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

Во всяком случае, я не могу подчеркнуть это достаточно: нормализовать структуру базы данных, если у вас есть очень веские причины, чтобы не (и быть абсолютно уверены, что они действительно хорошие причины, потому что, как правило, они не являются)

Смежные вопросы