0

SQLの理解が限られているので、これをお願いします。明らかな場合は、事前にお詫び申し上げます。「未読」メッセージの結果セットを返し、作業中の単純なWebアプリケーションのユーザー(作成者と呼ばれる)のテーブルからの送信者IDと一致するselectクエリがあります。表について以下に説明します。

著者:

aId int(20) NO  PRI NULL    auto_increment
aUser   varchar(30) NO  UNI NULL    
aPass   varchar(40) NO      NULL    
aEmail  varchar(30) NO  UNI NULL    
aBio    mediumtext  YES     NULL    
aReg    datetime    NO      NULL    

メッセージ:

msgId   int(20) NO  PRI NULL    auto_increment
mSender int(20) NO  MUL NULL    
mReciever   int(20) NO  MUL NULL    
mTitle  tinytext    NO      NULL    
mBody   mediumtext  NO      NULL    
mRead   tinyint(4)  NO      NULL    
mDate   datetime    NO      NULL    

私が使用しているselectクエリは(Tks martina)です:

 SELECT messages.mTitle, messages.mBody, messages.mDate, authors.aUser 
 FROM messages LEFT JOIN authors on aId=mSender WHERE mReciever = '$aId' AND mRead = '0'

$ aIdは、アクティブユーザーのuserIDを含むphpセッション変数です。私のphpアプリケーションは、この「未読」メッセージが処理されたため、現在読み取られていると想定します。上記のクエリを変更して、mReadを1に更新し、既読であることを示すことができます。同じSQLステートメントでUPDATEを使用してSELECTを実行しないでください。これを回避する別の方法がありますか?正しいソリューションから何マイルも離れていますか?よろしくお願いします。

4

2 に答える 2

1

あなたが聞いたことは正しいです。1つのステートメントでSELECTとUPDATEを実行することはできません。PHPコードは、2つの異なるSQLコマンドを実行する必要があります。選択した後、結果でPHPを使用して、返されるメッセージのIDを把握し、メッセージテーブルで「UPDATEmessages SET mRead = 1 WHERE msgId IN(?)」のようなUPDATEステートメントを実行します。

于 2013-03-23T16:37:36.353 に答える
0

あなたはJOIN中にテーブルをすることができますUPDATE

UPDATE table1
LEFT JOIN table2 ON(table1.id = table2.id)
SET ...
WHERE ...

WHEREステートメント内のレコードを選択します。

関連:https ://stackoverflow.com/a/806925/1815881

私のブログ投稿:http ://athlan.pl/mysql-update-join/

2番目の方法は、更新して実行するレコードのIDを選択することです。

UPDATE table
SET ...
WHERE id IN( ...your select... )
于 2013-03-23T16:41:03.683 に答える