MySQL Query bir "yumru sistemi" oluşturmak için

2 Cevap php

Ben sorun aşağıdaki eylemi gerçekleştiren bir MySQL sorgusu oluşturan yaşıyorum:

Her iş parçacığı ThreadId için threadID eşit ile en son yazı (büyük zaman damgası) (azalan sırayla) zaman damgası ile konuları tablo sipariş tüm threadIDs seçiniz. Böylece temelde parçacıkları geçmesi ve en konu 0 diyelim için MySQL veritabanı kontrol istiyorum. Daha sonra 0 ThreadId ve thread0 içindeki mesajların büyük zaman damgası dayanan thread0 türlü var mesajların tümünü denetler. Sonra vb, Thread1 için thread2 bu tekrarlar ve buna göre sıralar.

Bu bile mümkün mü? Bu iplik, ölür o altına düşene kadar en son etkin iplik sürekli olarak listenin üst bombelidir forumun "çarpmak sistemi" etkisi yaratmak için olduğunu. Ben konuları tabloda bir lastActivity damgası depolanır ve sonrası yeni bir iplik içine sunuldu ne zaman güncellenmiş farklı bir uygulama kullanmak için kullanılır, ancak bu sorgu işler çok daha verimli olur.

Thanks a lot! Konuları ve mesajlar: burada ilgili iki tablo vardır. Mesajlar, ait ipliğin kimliğini saklayan bir threadID alanı var, ve aynı zamanda bir zaman damgası alanı vardır. Konu yazının ThreadId karşılık gelen bir alan ThreadId vardır.

2 Cevap

Aşağıdaki MySQL üzerinde geçmişte benim için çalıştı. Eğer sorgudaki her parçacığı hakkında daha fazla eklemek istiyorsanız SELECT için sütunlar eklemek zorunda ve GROUP BY edeceğiz.

select thread.threadID, max(comments.modifiedOn) as threadUpdated 
   from thread inner join comments on thread.threadID = comments.threadID 
   group by 1 
   order by 2 desc;

Bu sorgu parçacığı listesi birincil isteği, benim en son yorum emretti vermektedir. Bu kadar-hiçbir yorumlarla konuları değil dönecektir, sen bunu bir dış birleşim katılmak değiştirmeniz gerekir.

SELECT  *
FROM    threads t
LEFT JOIN
        posts p
ON      p.id =
        (
        SELECT  p.id
        FROM    posts pi
        WHERE   pi.threadID = t.threadID
        ORDER BY
                pi.timestamp DESC
        LIMIT 1
        )

Üzerinde bir dizin olması posts (threadID, timestamp) ölçüde bu sorguyu artıracaktır.

GROUP BY çözümlerinin aksine, bu sorgu posts tüm alanları seçer ve en son posts.timestamp üzerine çoğaltmaları olsa bile çalıştığını unutmayın.