Bu JOIN ile Yardım

5 Cevap php
$threads = mysql_query("SELECT DISTINCT t.id, t.title
                        FROM threads t LEFT JOIN comments c ON t.id = c.parentID
                        ORDER BY c.date DESC");

while ($thread = mysql_fetch_assoc($threads)) {

 echo "<li><a href=\"?threadID=$thread[id]\">".htmlspecialchars($thread['title'])."</a></li>\n";

}

Herkes bu kodda bir sorun görebilirsiniz? I want it gibi alışkanlık iş. Ben üstüne son olarak yorumladı iplik istiyorum, ve bir sonraki son vs

echo $ thread [parentID] şey yankıları

comments:
id, comment, parentID, date

5 Cevap

Sen değil DISTINCT listesindeki bir sütun tarafından sipariş edilir.

Bu ancak bu ORDER BY anlamsız, MySQL geçerli sözdizimi.

Bu sözdizimi, bir MySQL uzantısı , bu sorgu dört büyük başka RDBMS motoru başarısız olacaktır.

Bu DISTINCT kolaylaştırmak için kullanılır ve bu durumlarda GROUP BY sorgular column SELECT içinde ya da aynı değer {[(4) }] hep GROUP BY ya da DISTINCT sütunun aynı değere karşılık gelir.

Senin durumunda ise, c.date [(3)] {için seçilmiş olacaktır t.id her değeri için c.date birden değerleri ve hangi değeri olabilir } (Bu son değer, ilk değer veya başka bir değer olabilir) kadar garantili olmaktan değildir.

Bu gibi sorguyu yeniden yazın:

SELECT  t.id, t.title,
        (
        SELECT  c.date
        FROM    comments c
        WHERE   c.parent_id = t.id
        ORDER BY
                c.date DESC
        LIMIT 1
        ) lastcomment
FROM    threads t
ORDER BY
        ISNULL(lastcomment), lastcomment

Veri MySQL Query tarayıcıda sorguyu çalıştırmayı deneyin, ve bu herhangi bir sonuç döndürürse bakın. Eğer varsa, o zaman sorun, yankı, değil sorgu ile.

Ben bu nedenle bu Tsql eserlerini bilmek bir şeydir süre içinde MySQL kullandık değil. Eğer deneyebilirsiniz:

SELECT DISTINCT t.id, t.title
FROM threads t LEFT JOIN comments c ON t.id = c.parentID AND 
c.id = (SELECT MAX(c.id) FROM comments where comments.parentID = t.id)
ORDER BY c.date DESC

Bu kolayca yorumların satır bir sürü biraz yavaş alabilir. Eğer bir performans sorunu fark eğer eğer konuda son açıklama tarihini saklamak için bazı mantıklı olabilir.

Bunu denedim ve istediğiniz gibi geliyor olarak çalıştı

SELECT DISTINCT t.id, t.title FROM threads AS t LEFT JOIN comments AS c ON t.id = c.parent_id ORDER BY c.date DESC

Ben değiştim tek gerçek şey kullanıyordum

Mesajlara DAN AS T

Ben size ulaşmak için çalışıyoruz tam olarak emin değilim, ama parentId yankı istiyorsanız, sorguda eklemeniz gerekir.

$threads = mysql_query("SELECT DISTINCT t.id, t.title, c.parentID
                        FROM threads t LEFT JOIN comments c ON t.id = c.parentID
                        ORDER BY c.date DESC");