-1

|で区切られたテーブルフィールドにユーザーID値を格納しています。(user_id1 | user_id2 | user_id3 | user_id17)。

ユーザーIDは、特定の時点でこのフィールドに追加および削除されます。

現在のユーザーIDがフィールドに存在するかどうか、またはクエリを使用していないかどうかを確認するにはどうすればよいですか?そしてもちろん、それは完全に一致する必要があります。user_id1を探して見つけることができませんuser_id17

SELECTクエリを使用し、フィールドを展開してから使用できることはわかってin_arrayいますが、クエリを使用してそれを行う方法がある場合は、それが良いでしょう。

私がしていることを説明すると思います。私は小さなプライベートWebサイト(7ユーザー)用のフォーラムを作成しましたが、それをより大規模にコーディングしました。

私のテーブル構造はかなり良いです:forum_categories、forum_topics、forum_posts。削除および更新クエリにテーブル間で外部キーを使用する。

私が助けを求めているのは、各ユーザーのトピックを未読としてマークすることです。topic_idとuser_idを使用して新しいテーブルを作成できます。それぞれが新しい行になりますが、多くのユーザーとトピックでは適切ではありません。

誰かがより良い解決策を持っているなら、私はそれですべてです。または、user_idごとに1行が最善の方法であることを私に証明することができます。そうすれば、私はそれを喜んで行うでしょう。

4

1 に答える 1

1

既読メッセージを追跡したいのであって、その逆ではないと思います。未読メッセージを追跡した場合、ユーザーを追加するたびに、そのユーザーをすべてのトピックの「未読リスト」に追加する必要があります。

私のコメントが示唆したように、私はSMFを調べました。読み取りメッセージを追跡するために別のテーブルを使用しています。

シンプルなテーブルに置いてあり、必要なものはuser_idありtopic_idます。ユーザーがトピックを読むときは、テーブルにそのユーザーの行があることを確認してください。

別のテーブルを使用するもう 1 つの理由。LIKE %ステートメントを使用するよりも、データベース内の 2 つの int 値に対してクエリを実行する方が高速になります。

于 2013-03-10T18:19:00.817 に答える