2

ユーザーがお互いにメッセージを送信できるようにしたいのですが、今のところこれは現在のスキーマです

CREATE TABLE IF NOT EXISTS `inbox` (
  `id` int(11) NOT NULL auto_increment,
  `id_usuario` int(11) NOT NULL,
  `id_to` int(11) NOT NULL,
  `mensaje` varchar(250) collate utf8_spanish_ci NOT NULL,
  `texto` text collate utf8_spanish_ci NOT NULL,
  `fecha` date NOT NULL,
  `visto` int(1) NOT NULL,
  `adjunto` int(1) NOT NULL,
  `item` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=1 ;

この質問については、私はそれが関連しているだけだと思います:

  • id_usuario-ユーザー(送信者)からの一意のID
  • id_to-ユーザー(受信者)からの一意のID
  • id-一意のメッセージID

不思議なんだけど、

'id_to'タイプを整数(1つのIDのみ)からvarcharに変更すると、次のようになります。

  • id_usuario-ユーザー(受信者)から分離された複数の一意のIDのコンマ

    (複数のID)のような複数の受信者を保存します: '333、444、555'

私はできるでしょうか:

  • 各受信者にメッセージを表示しますか?

まだクエリを理解していると、次のようになります "select * from inbox where sesionid IN (idto)"か?

  • メッセージの各受信者を送信者に表示しますか?まだクエリを理解している、それは次のようなものでしょう"select id_to from inbox where id = '254'" か?そして'、'で爆発しますか?

または、

スキームを変更する必要がありますか?

4

2 に答える 2

3

各行にメッセージ ID と受信者 ID がリストされている受信者を格納する別のテーブルを作成すると、これをより適切に行うことができます。同じメッセージ ID の複数の行は、同じメッセージの複数の受信者を表します。

JOINこの種の構造では、ステートメントを使用して受信者に対してクエリを実行できます。

于 2011-04-14T03:53:33.747 に答える
2

プロジェクトのサイズがわからない場合、複数の ID を 1 つの列に格納することは通常推奨されません。これは、各 ID でフィルター処理するために必要な処理能力のためです。

「MessageReceivers」などと呼ばれるテーブルを作成することをお勧めします。これには、メッセージを受信した人のメッセージ ID とユーザー ID が含まれます。受信者ごとに 1 つの行を作成します。

次に、インデックスを使用すると、単純な結合でそのユーザーのすべてのメッセージをすばやく取得できます。

于 2011-04-14T03:54:42.340 に答える