MySQL nasıl çıktı ilişkisi için, "doğru yolu" katıldı

3 Cevap php

Her şeyden önce, zavallı konu başlığını bahane. Ben sadece sonra Google'a bu soruyu ya da ne formüle nasıl hiçbir fikrim yok, bu yüzden bu kolay cevap verilebilir bir şey varsa beni vurmayın.

Ben aşağıdaki tablolar vardır varsayalım:

[YAZARLAR] id, adı

[HABER] id, öğe, author_id

Ben bir haber öğesi ve çıkış (author_id saklanan) gelen yazar göstermek istedim, ben aşağıdaki sorgu yaparım:

SELECT * FROM `news` JOIN `authors` ON news.author_id = authors.id

Ve sonra böyle bir şey yaparak çıktısı

$Q = "SELECT * FROM news JOIN authors ON news.author_id=news.id";

$query = $this->lite->query($Q) or die($this->lite->error); 

$result=null; while($obj = $query->fetch_object()){
    	$result.= '<li>'.$obj->item. 'by ' . $obj->name . '</li>';
}

Burada, $ obj-> isim yazarın adını içerecektir ve olur başarıyla çıktı.

"Name" alanı yerine "item" denilen olsaydı Peki, ne olur? Belli ki bazı çatışmalar var olacaktır. Uskur ve benim önceki deneyim ile Symfony, ben böyle bir şey yapardı: getAuthorId () -> getName () - ama bu proje için sıfırdan SQL yazmak için gerekli ediyorum.

Tüm cevapları takdir! Teşekkürler!

3 Cevap

Üretim kodunda * sözdizimi asla kullanmayın.

Bu gibi sorguyu yeniden yazın:

SELECT  news.item AS news_item, author.name AS author_name
FROM    `news`
JOIN    `authors`
ON      news.author_id = authors.id

Senin alanları aliasing gerekli adlandırma çatışmalarını önlemek için.

Siz news.item veya authors.item gibi kalifiye bir isim kullanmak gerekir.

Bunları açıkça isim

SELECT  n.id, n.item, n.author_id,a.name,a.id 
FROM 
`news` as n JOIN `authors` as a 
ON 
n.author_id = n.id

;

Ya da belki daha fazla gibi

SELECT  n.id as newsid, n.item as newsitem, n.author_id as autohor_authorid,
a.name as authorname,a.id as authorid 
FROM 
`news` as n JOIN `authors` as a 
ON 
n.author_id = n.id;

Yalnızca gerçekten ihtiyacınız sütunları çekin gerekir. Her zaman ilgilendiğiniz sütunları isim seçin * mutlaka kötü tarzı kabul, ya da kod kırmak kolay eğer örneğin Başka bir sütun tablosuna eklenir.