bluecrown adlı üyeden alıntı: mesajı görüntüle
Merhaba! Sizin sorunuz için yardımcı olmaktan memnuniyet duyarım. Tabii ki size bu konuda yardımcı olabilirim. İşte adım adım düşünce sürecim ve önerilerim:

### Düşünce Süreci

1. Sorguda haberler tablosundaki kategoriler sütunundaki ID değerini haber_kategori tablosundaki ID değeri ile kontrol etmemiz gerekiyor.
2. Eğer ID'ler eşleşirse, haber_kategori tablosundan AD ve LİNK bilgilerini çekeceğiz.
3. Bu işlemi yaparken, haberler tablosunda boş kategori ID'leri için NULL döndürmek istiyoruz.

### Önemli Noktalar

- JOIN sorgusu kullanacağız çünkü iki tablo arasında ilişki var.
- ON clause'ı kullanarak tabloları birleştirme koşullunu belirleyeceğiz.
- WHERE clause'ı kullanarak ID'lerin eşleşmesini kontrol edeceğiz.
- CASE statement kullanarak farklı durumlar için farklı sonuçlar döndüreceğiz.

### Kod İmplementation

İşte istediğiniz gibi bir SQL sorgusu örneği:

sql
SELECT
H.haber_id,
H.haber_baslik,
H.haber_metin,
H.kategori_id,
CASE
WHEN HK.kategori_id IS NOT NULL THEN CONCAT(HK.kategori_ad, ', ', HK.link)
ELSE NULL
END AS kategori_info
FROM
haberler H
LEFT JOIN
haber_kategori HK ON H.kategori_id = HK.kategori_id
WHERE
H.kategori_id IS NOT NULL OR HK.kategori_id IS NOT NULL;
Bu sorguda:

1. `haberler` tablosu (H) ve `haber_kategori` tablosu (HK) birleştiriliyor.
2. `ON` clause'ı ile tabloların ID'leri eşleştiğine göre birleştirme yapıyoruz.
3. `CASE` statement kullanarak, eğer `haber_kategori` tablosunda bir kayıt varsa, kategori adı ve link bilgisi döndürüyoruz.
4. Eğer `haber_kategori` tablosunda bir kayıt yoksa veya ID'ler eşleşmiyor ise NULL döndürüyoruz.
5. `WHERE` clause'ı ile sadece kategorili haberleri seçiyoruz.

### Özet ve En İyi Uygulamalar

Bu sorgu, istediğiniz gibi haberler tablosundaki kategoriler sütunundaki ID değerini haber_kategori tablosundaki ID değeri ile kontrol ediyor ve eğer eşleşirse AD ve LİNK bilgilerini çekebiliyor. Ayrıca boş kategori ID'leri için NULL döndürüyor.

En iyi uygulamalar şunlardır:

1. Tablo adlarını Türkçe olarak kullanmak yerine İngilizce (örneğin, haberler için "news" yerine "articles") daha anlaşılır hale getiriyor.
2. JOIN kullanarak veri tabanının ilişkilerini etkili bir şekilde kullanıyor.
3. CASE statement kullanarak farklı durumlar için farklı sonuçlar döndürüyor.
4. WHERE clause'ı kullanarak gereksiz işlemleri önleyerek performansını artırıyor.

Bu sorguyu kullanırken, tabloların exact column names'i ve table names'i size uygun olduğunda güncellemenizi öneririm. Ayrıca, tabloların schema'sı ve veri tipleri size göre ayarlanmalıdır.

Citations:
[1] https://stackoverflow.com/questions/...n-column-value
[2] https://www.interviewquery.com/p/sql-conditional-join
[3] https://dba.stackexchange.com/questi...-column-select
[4] https://www.sqlservercentral.com/for...een-two-tables
[5] https://launchschool.com/books/sql/read/joins
[6] http://sqlines.com/mysql/how-to/join...d-on-condition
[7] https://bytes.com/topic/sql-server/8...ased-condition
[8] https://dev.to/gschro/conditional-co...in-in-sql-5g03
[9] https://asktom.oracle.com/ords/askto...nditional-join


Yazılım ile ilgili olarak https://www.phind.com/ yapay zeka aracını kullanabilirsiniz.
Detaylı açıklamanız için çok teşekkür ederim.

webcolic adlı üyeden alıntı: mesajı görüntüle
Bu durum için Inner Join kullanmanız gerekiyor.

SELECT h.*, hk.ADI as kategori_adi, hk.LINK as kategori_link FROM haberler h  INNER JOIN haber_kategori hk ON h.kategori = hk.ID WHERE h.dil='{$dilsec["id"]}'  ORDER BY h.id DESC LIMIT 3
Çok teşekkür ederim hocam çalıştı kodunuz eksiğimi sayende öğrenmiş oldum. Ancak üstteki yorum daki LEFT JOIN ile sizin kullandığınız INNER JOIN kafamı karıştırdı bunları bir araştırayım