постараюсь описать проблему, с которой я столкнулся:)
Каждая тема / тема на моем форуме представляет собой один диск. Зарегистрированные участники форума используют ряд флажков (один из которых отображается рядом с каждым диском), чтобы отметить каждый диск, который они имеют в своей коллекции. Когда форма $ _POST'ed, она сохраняет информацию в таблице следующим образом:
| user_id - disc_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))
{
// Если вошедший в систему идентификатор пользователя совпадает с текущими дисками user_id (т.е. если этот пользователь владеет этим диском)
if ($ cur_topic ['user_id'] == $ pun_user ['id']) {
$ read = '
У меня есть это!';
} еще {
$ read = '
У меня есть это!';
}
}
}
Это прекрасно работает, пока второй пользователь не добавит тот же идентификатор диска в свою коллекцию, например:
| user_id - disc_id |
+ -------------------- +
| 2 - 571 |
| 2 - 603 |
| 6 - 571 |
Это приводит к дублированию темы на форуме. Один из них помечен галочкой (потому что он принадлежит мне), другой не помечен, хотя он содержит одну и ту же информацию, такую как идентификатор темы и изображение.
Моей первой мыслью было попытаться добавить GROUP BY c.disc_id в SQL, что успешно удаляет дублирующую тему - однако она удаляет неправильную. Диск, который я отмечал, больше не отображается, оставляя только не отмеченную версию.
Надеюсь, это имеет смысл. Может ли кто-нибудь предложить какие-либо идеи или идеи?
Большое спасибо.