Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Wykluczenie powtarzających się rekordów
Forum PHP.pl > Forum > Bazy danych > MySQL
magu112
Witam,

Mam baze danych, 3tabele, jedna posty druga komentarze (trzecia userzy), funkcjonowanie skryptu to ostatnio skomentowane posty...
Jak wykluczyć powtarzajace sie rekordy ? Najnowsze komentarze na poczatku lecz jak kilka osob doda komentarze do jednego postu to w liscie komentowanych post wystepuje kilka razy..


jak dam tak to dubluje:
  1. $data->query( "SELECT c.post_id, c.date, c.user_id, p.id, p.date as newsdate, p.title FROM tabela_komentarze as c, tabela_posty as p, tabela_userzy as u
  2. WHERE p.id=c.post_id AND c.user_id = u.user_id ORDER BY c.date DESC LIMIT 0, 6");


w ten sposób nie dubluje ale zalicza tylko pierwsze komentarze, jak post ma już jakiś komentarz i ktos doda nowy to nie pokazuje na liscie
  1. $data->query( "SELECT c.post_id, c.date, c.user_id, p.id, p.date as newsdate, p.title FROM tabela_komentarze as c, tabela_posty as p, tabela_userzy as u
  2. WHERE p.id=c.post_id AND c.user_id = u.user_id GROUP BY p.id ORDER BY c.date DESC LIMIT 0, 6");
  3.  
  4. // tak samo z:
  5. $data->query( "SELECT c.post_id, c.date, c.user_id, p.id, p.date as newsdate, p.title FROM tabela_komentarze as c, tabela_posty as p, tabela_userzy as u
  6. WHERE p.id=c.post_id AND c.user_id = u.user_id GROUP BY p.id,c.date ORDER BY c.date DESC LIMIT 0, 6");



jest jakis latwy sposob na wyciagniecie ostatnich komentarzy bez dublowania postow ? po prostu ostatni komentarz i post z tym komentem wyswietlany najwyzej zeby jak zostanie dodane 3 komentarze do postu zeby go nie wyswietlalo 3razy tylko raz. questionmark.gif?
pmir13
Wystarczy wyjść od listy id trzech postów z najnowszymi komentarzami:

  1. SELECT post_id, max(date) AS ost_data
  2. FROM tabela_komentarze
  3. GROUP BY post_id
  4. ORDER BY ost_data DESC LIMIT 3


i do tego dołożyć wszystkie potrzebne joiny:

  1. SELECT c.post_id, c.date, c.user_id, p.id, p.date AS newsdate, p.title
  2. FROM tabela_komentarze c, tabela_userzy u, tabela_posty p,
  3. ( SELECT co.post_id, max(co.date) AS ost_data
  4. FROM tabela_komentarze co
  5. GROUP BY co.post_id
  6. ORDER BY ost_data DESC LIMIT 3 ) posty_3
  7. WHERE c.post_id = posty_3.post_id AND c.date = posty_3.ost_data
  8. AND c.user_id = u.user_id AND c.post_id = p.id
magu112
Bardzo dobra odpowiedź.
Takiej odpowiedzi oczekiwałem !

człowiek uczy się całe życie. smile.gif dzięki pozdrawiam ...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.