Gruplamada Sorun Var.
Arkadaşlar merhaba.Ana kategori ve alt kategori oluşturdum ve bağlamayı becerdim ama bunları gruplayamadım.
Inner join ve sonuna group by koyunca, anakategoriyi ve sadece altkategorinin 1inci satırını çıkarıyor.2. satırı okumuyor.Örnek
Ekran Karti
asus
fan
fan120a
Klavye
a4tech
eğer inner join ve sonuna order by koyarsam alttaki gibi bu sefer her kategori tekrar ediyor.Ör:
Ekran Karti
asus
Ekran Karti
Geforce
fan
sony fan
fan
beko fan.
Amacım alttaki kodu öyle bir şekilde yazmam lazım ki şöyle alttaki gibi olsun. kısaca ana kategorinin altında alt kategoriler var:
Ekran Karti (Ana)
Asus
Geforce
fan (Ana)
sony fan
beko fan
<?php
include("baglan.php");
$sec=mysql_query("SELECT kategoriler.anakategori, altkategoriler.altkategori from kategoriler INNER JOIN altkategoriler ON kategoriler.anakategori_id=altkategoriler.anakategori_id GROUP BY kategoriler.anakategori");
while($yaz=mysql_fetch_array($sec)){
echo $yaz["anakategori"] . "<br>";
echo $yaz["altkategori"] . "<br>";
}
?>
Php
ilk önce normal select ile tüm kategorileri seçsen. ve sıralatsan. sonrasnda ise bir iç select kullanarak alt kategorileri seçsen olur. ve birde alt kategori,ana kategori olarak sınıflandırmaktansa. hepsini normal kategori gibi düşünüp, fakat hangisi alt kategori olcaksa ona üst kategorisinin değeri vermek daha mantıklı.
örn: kategoriler tablonda şöyle bişey olsa.
kategori_id, kategori_adi, alt_mi, ust_kategori_id
şimdi kategorileri eklerken. ana kategori olacak kategorilerin alt_mi değerine 0 vericeksin. ve ana kategorileri çekeceğin zaman ise 0 olan değerleri çekiceksin.
eğer kategori alt kategori olcaksa;
alt_mi değerini 1 girceksin. ve alt kategorileri çekiceğin zaman 1 değeri şartına göre çekiceksin. ve hangi kategorinin alt kategorisai oldugunu ise ust_kategori_id numarasından bulucaksın. şimdi sıra geldi kategori sıralamaya...
kategorileri sıralamak için şöyle bi yöntem kullanabiliriz. şimdi;
normal select ile ana kategorilerimmizi çekicez. fakat where şartımız 0 olcak. böylece ana kategorileri çekmiş olcagız. kategorileri while döngüsü ile sıralıyorduk değilmi?
şimdi o while döngüsünün içinede bir select cümlesi yerleştirip, onada bir while döngüsü koyarsak her kategorinin alt kategorisinide çekmiş oluruz..
yani while içinde birtane daha while koymuş olacagız. ikinci select cümlemizde ise where şartımız o anda listelediğimiz kategori id numarasının ust_kategori_id stunundaki id numaraları ile karşılaştırılması. yani ilk whilemiz (yani büyük while döngümüz) bir defa işlediğinde ilk çektiği kategorinin id numarasını ikinci (küçük select cümlemize) yani ilk while döngümüzün içindeki olan select cümlemize aktarıcaz. ve ona göre alt kategori seçicez.
bu yöntemi belki pek iyi anlatamadım fakat oldukça kolay ve mantıklı. Anlatma kabiliyetim konusunda bazı şüphelerim var
Php
alicin sağol yardımların için.Ben bir deneyim.Aslında yapmak yapmak istediğim ana kategorilere tıklayınca alt kategorilerin gelmesi.İlan sitelerinde olur genellikle.