私が抱えている問題を説明するために最善を尽くします:)
私のフォーラムの各スレッド/トピックは、1 つのディスクを表します。フォーラムの登録メンバーは、一連のチェックボックス (各ディスクの横に表示されるチェックボックス) を使用して、コレクションにある各ディスクにチェックを入れます。フォームが $_POST されると、次のように情報がテーブルに保存されます。
| | ユーザー ID - ディスク ID |
+--------------------+
| 2 - 571 |
| | 2 - 603 |
| | 2 - 4532 |
ユーザーが次にフォーラムを表示すると、ユーザーが所有するディスクのチェックボックスがチェックされ、無効になります。これは以下を使用して行われます。
$sql = 'SELECT id, poster, subject, posted, last_post, last_post_id,
last_poster, num_views, num_replies, closed, sticky, moved_to, topicimage,
c.user_id, c.disc_id FROM topics LEFT JOIN collections AS c ON c.disc_id=id
WHERE forum_id='.$id.' ORDER BY sticky DESC;
上記はすべてのディスクを取得し、次の (簡略化された) コードを使用して表示します。
$result = $db->query($sql) or error('Unable to fetch topic list '.$sql.'', __FILE__, __LINE__, $db->error());
// If there are topics in this forum
if ($db->num_rows($result))
{
while ($cur_topic = $db->fetch_assoc($result)) { // ログインしているユーザー ID が現在のディスクの user_id と一致する場合 (つまり、このユーザーがこのディスクを所有している場合) if ($cur_topic['user_id']==$pun_user ['id']) { $read = '
私はこれを所有しています!'; } else { $read = '
私はこれを所有しています!'; } } }
2 番目のユーザーが同じディスク ID を自分のコレクションに追加するまで、これはうまく機能します。
| | ユーザー ID - ディスク ID |
+--------------------+
| 2 - 571 |
| | 2 - 603 |
| | 6 - 571 |
これにより、重複したスレッドがフォーラムに表示されます。1 つは正しくチェックされており (私が所有しているため)、もう 1 つはチェックされていませんが、トピック ID や画像などの同じ情報をすべて共有しています。
私の最初の考えは、GROUP BY c.disc_id を SQL に追加しようとすることでした。これにより、重複するトピックが正常に削除されますが、間違ったトピックが削除されます。チェックを入れたディスクは表示されなくなり、チェックを外したバージョンだけが残ります。
それが理にかなっていることを願っています。誰でも洞察やアイデアを提供できますか? どうもありがとう。