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>";

}

?>

2011-03-12 14:46:39 Edit:2011-03-12 14:49:16

Php

alicilinAli Fırat Güler

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 varsmiley

 

2011-03-12 19:47:40

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.

2011-03-12 20:40:54

phpkodlari.com © 2009 Herkes Php öğrenecek
Eglence ve Oyun: Gamikro