MySQL sorgusu iki tablo, doğru alanlara ekran çekerek

2 Cevap php

Ben sürece onlar ortak bir kimliği paylaşan konum olarak iki ayrı tablo tüm alanları seçmek için çalışıyorum.

//mysql query
$result = mysql_query("SELECT * FROM project, links 
WHERE project.id = links.id and project.id = $clientID")

//displaying the link 
if ($row['url'] != null){
    echo "<div class='clientsection' id='links'>Links</div>";
    echo "<a class='clientlink' id='link1' href='" . $row['url'] . "'>" . $row['name'] . "</a>";
}
else {
echo "<a class='clientlink' id='link1' href='" . $row['url'] . "' style='display:none;'>" . $row['name'] . "</a>";
        };

Gördüğünüz gibi, benim tablolar "projeleri" ve "bağlantıları" Her başvuru için ortak bir alan "id" paylaşıyor vardır. O, bir şey çıkarır hem links.id and project.id eşit olduğu gibi görünüyor, ama olduğunda hiçbir links.id $ ClientID verilen bir $clientID konteyner akrabası ile ilişkili de göstermek değil.

Esasen ben bu CMS belirli bir müşteri için dinamik bağlantıları eklemek için bu kullanıyorum ve hiçbir bağlantıları varsa, ben konteyner zaten göstermek istiyorum.

Umarım kendimi açıkça ifade ettik, doğru yönde herhangi bir işaretçiler takdir edilmektedir. Teşekkürler!

2 Cevap

Eğer katılmak sizin örtülü yapıyorsun INNER JOIN Buna karşıt olarak, SQL ANSI açık katılmak sözdizimi kullanarak, bir LEFT OUTER JOIN belirtebilirsiniz.

SOL DIŞ eşleşen hiçbir satır birleştirme tablosunda olsa bile ilk tablodaki sonuçları döndürür JOIN:

SELECT * FROM project
LEFT OUTER JOIN links 
ON links.id = project.id
WHERE project.id = $clientID

Eşleşen id bağlantıları tablo var satırlar için, links.id olacak NULL.

Edit

Eğer değiştirmemesi birincil anahtar links.linkid sırasını belirler sadece ilk bağlantı istiyorsanız, böyle bir öz katılabilir yapabilirsiniz:

SELECT * FROM project
LEFT OUTER JOIN links
ON links.id = project.id
LEFT OUTER JOIN links l2
ON l2.id = project.id AND l2.linkid < links.linkid
WHERE project.id = $clientID AND l2.id IS NULL

Bu ne linkid küçüktür, ve sonra WHERE yan tümcesinde bu satırları Hariç Tutulan herhangi bir bağlantıları tablo satırları katılmak olduğunu. Eğer küçük bir linkid, her bir proje için küçük linkID ile dolayısıyla bağlantı var sadece satır ile sona.

Sorgu aslında yapıyor olduğunuz bir sadece iki tabloda id orada eşleştirme kayıtları döndürür böylece "INNER JOIN". Eğer Marcus'un örnekte olduğu gibi bir "SOL DIŞ JOIN" yaparsanız aradığınız sonuçları dönecektir.