Bir Üyelik için üçüncü bir tablo ekleme

3 Cevap php

Bu sorgu çalışıyor:

$sqlStr = "SELECT s.loginid, s.title, s.url, s.displayurl, l.username
             FROM submission AS s,
                  login AS l
            WHERE s.loginid = l.loginid
         ORDER BY s.datesubmitted DESC
            LIMIT 10";

Olur bu iş ben buna ("yorum" olarak adlandırılır) üçüncü bir MySQL tablo katılmak istedim?

$sqlStr = "SELECT s.loginid, s.submissionid s.title, s.url, s.displayurl, l.username, count(c.comment) countComments
             FROM submission AS s,
                  login AS l, 
                  comment AS c,
            WHERE s.loginid = l.loginid
              AND s.submissionid = c.submissionid
         ORDER BY s.datesubmitted DESC
            LIMIT 10";

Teşekkür peşin,

John

3 Cevap

Eğer gerçekten, birleşimler kullanarak gerektiğini daha net ve sizin nerede fıkra dışarı katılmak koşulları tutar. Eğer 3. bir tablo eklemek istediğiniz zaman da, daha tutarlı:

İşte orijinal kod açık katılmak sözdizimini kullanarak, var:

SELECT      s.loginid, s.title, s.url, s.displayurl, l.username
FROM        submission s
INNER JOIN  login l ON l.loginid = s.loginid
ORDER BY    s.datesubmitted DESC
LIMIT       10

Eğer üçüncü bir tablo eklemek istiyorsanız o, çok kolay:

SELECT      s.loginid, s.title, s.url, s.displayurl, l.username
FROM        submission s
INNER JOIN  login l ON l.loginid = s.loginid
INNER JOIN  comment c ON s.submissionid = c.submissionid
ORDER BY    s.datesubmitted DESC
LIMIT       10

Ayrıca, burada bir hile var. Eğer üzerinde katılmak iki sütun aynı adı iseniz, USING sözdizimi kullanabilirsiniz:

INNER JOIN  login l USING (loginid)
INNER JOIN  comment c USING(submissionid)

Neredeyse.

Üçüncü tablo doğru için sözdizimi (her ne kadar eski stil, bu Joın örtülü kullanır).

Ama COUNT (c.comment) çalışması yapmak için seçime GROUP BY yan tümcesi eklemek (MySQL belirli sözdizimi gevşek olduğundan ya da ben, "gereken" demeliyim) gerekir. Bu fıkra SELECT her sütun isim olmalıdır:

SELECT s.loginid, s.submissionid s.title, s.url, 
       s.displayurl, l.username, count(c.comment) AS countComments
FROM submission AS s,
     login AS l, 
     comment AS c,
WHERE s.loginid = l.loginid AND s.submissionid = c.submissionid
GROUP BY s.loginid, s.submissionid s.title, s.url, s.displayurl, l.username
ORDER BY s.datesubmitted DESC
LIMIT 10

Sen orada COUNT () işlevini kullanarak konum gibi (aşağıda örnekte sadece LoginID kurdum) içinde bir veya daha fazla alanları ile GROUP BY yan tümcesi eklemek gerekir, bu yüzden SQL şey giderdim gibi bu:

$sqlStr = "SELECT s.loginid, s.submissionid s.title, s.url, s.displayurl, l.username, count(c.comment) countComments
             FROM submission AS s,
                  login AS l, 
                  comment AS c
            WHERE s.loginid = l.loginid
              AND s.submissionid = c.submissionid
         GROUP BY s.loginid
         ORDER BY s.datesubmitted DESC
            LIMIT 10";