Обновление значения столбца из значения другой таблицы SQL

#php #html #mysql #sql #phpmyadmin

Вопрос:

У меня есть таблица chatmessages , в которой есть столбец chatId, incomingId, outgoingId, и у меня есть другая таблица chatmembers , в которой есть столбец chatId, usersId. Также еще одна таблица chat , содержащая только идентификатор чата и инициализатор usersId чата, который является user1

введите описание изображения здесь

введите описание изображения здесь

Теперь я хочу скопировать идентификатор чата chatmembers туда chatmessages , где внутри него находятся одни и те же пользователи, например, идентификатор входа 83 и идентификатор выхода 81 имеют один и тот же идентификатор в chatmembers

введите описание изображения здесь

У меня есть этот запрос, но он не работает

 UPDATE chatmessages SET chatId = 
(SELECT c.chatId FROM chat AS c INNER JOIN (SELECT chatId FROM chatmembers WHERE usersId = incomingId) AS uc ON c.chatId = uc.chatId 
INNER JOIN (SELECT chatId FROM chatmembers WHERE companyId = outgoingId) AS cc ON uc.chatId = cc.chatId)
 

Комментарии:

1. Отметьте свой вопрос в базе данных, которую вы используете.

Ответ №1:

Если я правильно понимаю, вы могли бы использовать join s. Ниже используется синтаксис MySQL:

 update chatmessages cm join
       chatusers cuo
       on cuo.userid = cm.outgoingid join
       chatusers cui
       on cui.userid = cm.incomingid and
          cui.chatid = cuo.chatid
   set cm.chatid = cuo.chatid;
 

Комментарии:

1. Спасибо, хм, могу я узнать, что не так с кодом, который я делал раньше? должно ли это тоже работать или мне нужно использовать JOIN, когда дело доходит до ОБНОВЛЕНИЯ?

2. @DanncarloReformado . . . Я не знаю, в чем проблема с вашим кодом. Мне очень трудно это читать.

3. Ваш ответ сработал, я просто хочу знать, что не так с моим предыдущим запросом на ОБНОВЛЕНИЕ, сэр, спасибо!

Ответ №2:

вы должны записать этот запрос в массив и затем выполнить, также используйте двойные кавычки в

 (SELECT c.chatId FROM chat AS c 
INNER JOIN (SELECT chatId FROM chatmembers WHERE usersId = incomingId) AS uc ON c.chatId = uc.chatId 
INNER JOIN (SELECT chatId FROM chatmembers WHERE companyId = outgoingId)
 

подобный этому

 ("SELECT c.chatId FROM chat AS c 
INNER JOIN (SELECT chatId FROM chatmembers WHERE usersId = incomingId) AS uc ON c.chatId = uc.chatId 
INNER JOIN (SELECT chatId FROM chatmembers WHERE companyId = outgoingId") 
 

Комментарии:

1. Извините, но это не мой вопрос. Спасибо