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