0

データベースにテーブルがありますTOPICSが、どのユーザーがそれを開いたかは記載されていません。ただし、私のMESSAGES表には、USERどのユーザーがそれを開いたかを示す列があります。私の質問は次のとおりです。TOPICSテーブルにユーザーの列を作成し、この情報を取得するにはどうすればよいですか?

現在、各プロファイルにユーザーの最後のメッセージがありますが、前述のように、トピックとトピック名へのリンクを表示できません。これは、にそのような列がないためTOPICSです。どうすればこれを可能にできますか?

これを使用して、ユーザーの最後のメッセージを取得しました。これは機能しました。

$lastpost = execute_scalar("SELECT message FROM messages where messages.user='$who' Order by date desc");

ここで、トピックに対して同じことを行う必要があります。

4

2 に答える 2

0

メッセージは常にトピックに関連していることを理解しているので、メッセージからトピックへの:1 関係を追加する必要があります。フィールドのタイプとテーブル スキーマの命名規則に応じて、次のようになります。

ALTER TABLE `messages` ADD `topicId` INT NOT NULL;

この場合、リレーションは実際にはId への外部キーとして構築されますが、これはもちろんテーブル topic に存在する必要があります。メッセージを保存するときは、この関連する topicID (またはトピックテーブルの対応する主キー) も保存する必要があります。メッセージを取得するときは、それに参加する必要があります:

SELECT message,user FROM messages,topics WHERE messages.topicId = topics.Id AND messages.user='$who' ORDER BY messages.date DESC

詳細な例については、mysql のドキュメント (CREATE、ALTER、および SELECT 構文) を確認してください。ORM を使用する場合は、hasManyリレーションの構築と処理の例を確認してください。

于 2012-10-11T08:55:18.457 に答える
0

あなたのニーズを理解しているかどうかわかりませんが、間違っていたら訂正してください...

あなたはできる..

1 - ユーザー テーブル 'LastTopicId' に列を追加します

2-ユーザーとトピックへの外部キー、日付を含む新しいテーブル「UserOpenTopic」を作成します...したがって、クエリを実行できます

$lastpost = query("SELECT topic.TopicName FROM UserOpenTopic INNER JOIN topic ON topic.ID = UserOpenTopic.TopicID where UserOpenTopic.userID='$who' Order by date desc");

そして、トピックに関するすべてのユーザーについて、最後のトピック (および全履歴) が必要です...

于 2012-10-11T08:53:33.877 に答える