Tekrarlar değil forum konuları ayıklamak için SQL-nasıl?

3 Cevap php

Benim web sitesinin ana sayfasında ancak ben iki kez aynı konuyu göstermek istemiyorum foruma son mesajları göstermek istiyorum. Ben aşağıdaki kod bunu nasıl değiştirebilirsiniz?

http://punbb.informer.com/wiki/punbb13/integration#recent_10_posts

Temelde ama sadece bir kez, her forum topic / parçacığının, son mesajları gösteriyor.

3 Cevap

Konuya başına yalnızca bir değer istiyorsanız, konuya göre grup ve her konudan en son mesajı seçebilirsiniz. Ardından, ilk 10 konu seçebilirsiniz.

Ben SQL yazacağım, ve PHP bu çevirebilir:

SELECT p.id, p.message, o.subject
FROM
((SELECT t.id
  FROM posts AS p LEFT JOIN topics AS t ON p.topic_id = t.id
  GROUP BY t.id
  HAVING p.posted = MAX(p.posted) ) ids LEFT JOIN topics AS t ON ids.id = t.id) o
                                        LEFT JOIN posts AS p ON o.id = posts.topic_id
ORDER BY p.posted DESC
LIMIT '0,10'

Sonrası konudaki son yazılan sadece kayıtlarını tutmak için bir koşul eklemek:

WHERE p.id = (
  SELECT pp.id 
  FROM posts AS pp
  WHERE pp.topic_id = t.id ORDER BY pp.posted DESC LIMIT 1
)

Bu satırı değiştirin

'SELECT'    => 'p.id, p.message, t.subject',

karşı

'SELECT DISTINCT'   => 'p.id, p.message, t.subject',