Wyeliminowanie z SELECT-a nadmiarowych rekordów z takimi samymi 2 kolumnami

0

Dzień dobry.

Próbuję napisać zapytanie, które zwróci mi rekordy pewnej tabeli, z pominięciem powtarzających się rekordów z dwoma takimi samymi kolumnami. Tabela nazywa się forum_helpmod. Ma takie pola:

help_id -- indeks
post_id  -- nie może się powtarzać w parze, z takimi samymi help_from
topic_id
help_time
help_from -- nie może się powtarzać w parze z takimi samymi post_id
help_to
help_reason

Czyli np.

help_id post_id topic_id help_time help_from help_to help_reason
1 1 1 1234 2 3 'abc'
2 1 2 1444 2 6 'abcde'
3 2 1 1554 2 3 'abc'
4 3 1 1234 2 3 'abcabc'

Chodzi teraz o to, że chcę, aby select wyeliminował mi jeden z dwóch pierwszych rekordów (jako, że mają te same post_id w parze z tymi samymi help_from) Nie ma dla mnie znaczenia który zostanie wyeliminowany, którykolwiek. Chciałbym aby select zwrócił mi tabelę ze wszystkimi rekordami, poza tymi, o których wspomniałem

Na razie sprawdziłem, czy są takie rekordy, przy pomocy zapytania:

SELECT post_id, help_from, count(*) ccc FROM forum_helpmod
GROUP BY post_id, help_from
HAVING ccc > 1

I są.

Tylko nie wiem, jak dobrać się do rekordów całej tabeli, bez tych nadmiarowych.

Będę bardzo wdzięczny za pomoc. Bardzo dziękuję.
Michał

Post Scriptum

Dodam jeszcze po co mi to potrzebne. Mam tabelę forum_thanks z dwoma kluczami głównymi i próbuję przekopiować dane z helpmod do thanks

Mam takie zapytanie:

INSERT INTO forum_thanks (post_id, user_id, poster_id, topic_id, forum_id, thanks_time)
SELECT h.post_id, h.help_from, h.help_to, h.topic_id, p.forum_id, h.help_time
FROM forum_helpmod h
JOIN forum_posts p ON p.post_id = h.post_id

Jednak wyrzuca mi ono błąd, gdyż post_id i user_id są kluczami głównymi, a SELECT zwraca rekordy, o których pisałem wcześniej (z powtarzającymi się parami kolumn). Więc chciałbym pominąć te powtarzające się i zostawić tylko jedną z tych powtarzających + unikatowe.

Jeszcze raz dziękuję za pomoc i wsparcie.
Michał

0

Select Distinct post_id ????

1
SELECT post_id, help_from, group_concat(help_id) list_help_id, count(help_id) ccc FROM forum_helpmod
GROUP BY post_id, help_from
HAVING ccc > 1

group_concat -> dla MySQL
w innych SQL'ach są odpowiedniki

0
_13th_Dragon napisał(a):
SELECT post_id, help_from, group_concat(help_id) list_help_id, count(help_id) ccc FROM forum_helpmod
GROUP BY post_id, help_from
HAVING ccc > 1

group_concat -> dla MySQL
w innych SQL'ach są odpowiedniki

Bardzo dziękuję. Twój post pozwolił mi napisać działające zapytanie. Dzięki!!

Dla potomnych. Chodziło mi o uzupełnienie tabeli thanks dodatku thanksforposts, na podstawie danych z dodatku helpMOD dla forum phpBB.
Zapytanie, które napisałem, z pomocą poprzedniego postu wygląda tak:

INSERT INTO forum_thanks (post_id, user_id, poster_id, topic_id, forum_id, thanks_time)
(SELECT h.post_id, h.help_from, h.help_to, h.topic_id, p.forum_id, h.help_time
FROM forum_helpmod h
JOIN forum_posts p ON p.post_id = h.post_id
WHERE h.help_id IN (SELECT SUBSTR(xxx.list_help_id, 1, LOCATE(",", xxx.list_help_id) - 1) ids FROM (SELECT post_id, help_from, group_concat(help_id) list_help_id, count(help_id) ccc FROM forum_helpmod GROUP BY post_id, help_from HAVING ccc > 1) as xxx))
UNION
(SELECT h1.post_id, h1.help_from, h1.help_to, h1.topic_id, p1.forum_id, h1.help_time
FROM forum_helpmod h1
JOIN forum_posts p1 ON p1.post_id = h1.post_id
WHERE h1.help_id IN (SELECT xxx2.list_help_id ids2 FROM (SELECT post_id, help_from, group_concat(help_id) list_help_id, count(help_id) ccc FROM forum_helpmod GROUP BY post_id, help_from HAVING ccc = 1) as xxx2))

I Działa!!
Dzięki
Michał

1 użytkowników online, w tym zalogowanych: 0, gości: 1