• 29-09-2009, 20:26:29
    #1
    Merhaba arkadaşlar şehir il ilçe köy ve mahalle veritabınımı illere ilçelere köylere ve mahallere böldüm fakat içinden çıkılmaz bir duruma geldim.
    tablo yapısı
    INSERT INTO `il` (`id`, `koy`, `mah`, `ilce`, `il`, `il_id`) VALUES
    (1, 'Büyükçıldırım Köyü ', 'Köyler', 'Seyhan', 'Adana', 1),
    (2, 'Büyükdikili Köyü', 'Köyler', 'Seyhan', 'Adana ', 1),
    ..
    (70, 'Yukarıçiçekli Köyü ', 'Köyler', 'Yüreğir', 'Adana ', 1),
    ..
    (172, 'Aydınyurdu Köyü', 'Köyler', 'Sarıçam', 'Adana ', 1),
    ..
    (275, 'Hasanbeyli Köyü', 'Köyler', 'Sarıçam', 'Adana ', 1),
    index.php
    <? 
    $sorgu2=mysql_query("SELECT * FROM `il` WHERE `il_id`='".$id."' group by il_id");
    while (  
           $ilyaz=mysql_fetch_array($sorgu2)  
           ){ 
    ?>
    <h2><span><?=$ilyaz['il'];?></span></h2>
    <h3><?=$ilyaz['il'];?> Haritasi - <?=$ilyaz['il'];?> Yol haritası </h3>
    <?
    $sorgu3=mysql_query("SELECT * FROM `il` WHERE `il_id`='".$id."' group by ilce");
    while (  
           $ilceyaz=mysql_fetch_array($sorgu3)  
           ){ 
    ?>
    <?
    $sorgu4=mysql_query("SELECT * FROM il WHERE il_id='".$id."' group by koy order by rand() limit 10"); 
    while (  
           $koyyaz=mysql_fetch_array($sorgu4)  
           ){ 
    ?>
    <p class="testTxt1"><i><?=$ilceyaz['ilce'];?><br><?=$koyyaz['koy'];?></i><img src="images/coma_inverse.gif" alt="" /></p>
    <?
    }
    }
    }
    ?>
    bu sorgulamamı 3 sorguda değilde tek sorguda nasıl yapabilirim.
  • 29-09-2009, 22:38:08
    #2
    Öncelikle soruyla beraber detayları da eksiksiz bir şekilde dile getirdiğiniz için tebrik ve teşekkür ederim. Öncelikle tablolarınızı
    il: id il
    ilce: id il_id ilce
    koy: id ilce_id koy

    şeklinde yapmanızı tavsiye ederim.

    Kodları yukarıdaki hale getirdiğiniz de yine 3 sorgu içinde
    select id,il ......
    select id,ilce where il_id=
    select id,koy where ilce_id=...

    şeklinde alt alta 3 sorgu ile halledilebilir ancak döngü içinde böyle sorguları tekrar ettirerek veritabanına yüklenmek hoş karşılanacak bir durum olmadığından kodları yine teke düşürmek gerekir.
    $sorgu=mysql_query("SELECT * FROM `il` WHERE `il_id`='".$id."'");
    $veriler=array();
    while($veri_al=mysql_fetch_assoc($sorgu)) {
    $il=$veri_al['il'];
    $ilce=$veri_al['ilce'];
    $koy=$veri_al['koy'];
    $id=$veri_al['id'];
    $veriler[$id[$il[$ilce[$koy]]]]=true;
    }
    şeklinde bi diziye tüm verileri depo ettikten sonra
    foreach($veriler as $id=>$il_bilgileri) {
    foreach($il_bilgileri as $il=>$ilce_bilgileri) {
    echo $id.' '.$il.'<br />';
    foreach($ilce_bilgileri as $ilce=>$koy_bilgileri) {
    echo '>'.$ilce.'<br />';
    foreach($koy_bilgileri as $koy=>$true) {
    echo '>>'.$koy.'<br />';
    }
    }
    }
    }
    }

    biraz karışık bi kod oldu aslında ama şu an aklıma geldiğinden ince eleyip sık dokuyamadım. şu halde görüntü
    Adana
    >Seyhan
    >>Büyükçıldırım
    >>Büyükdikili
    >Sarıçam
    >>Aydınyurdu
    >>Hasanbeyli

    şeklinde listeler. Biraz rahat olabilmesi için değişken sayısını olabildiğince yüksek tuttum, değişken sayısını azaltırsanız sizin menfaatinize olur
  • 29-09-2009, 22:47:07
    #3
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Arkadaşım bu da diğer açtığın konuya benzemiş eğer tüm illere göre değilde burada verdiğin şekilde tek bir ile göre ise yine arraya atıp foreach vbv. ile yapabilirsin, diğer mesajda söylediğim gibi, örnek vermek gerekirse :
    <? 
    $sorgu=mysql_query('SELECT * FROM il WHERE il_id="'.$id.' order by ilce, koy');
    while ($yaz=mysql_fetch_array($sorgu)){
     $iller[$yaz['il']][$yaz['ilce']][] = $yaz['koy'];
    }
    foreach($iller as $key => $val){
      echo $key.' ili<br>';
      foreach($val as $key2 => $val2){
        echo '<br>'.$key2.' ilçesi köyleri <br>';
        foreach($val2 as $key3 => $val3){
          echo $val3.'<br>';
        }
      }
     }
    ?>
    biraz karışık gibi gelebilir ama mantığını anlarsın umarım;
  • 29-09-2009, 23:33:52
    #4
    Seyranli ve metadige hocam çok teşekkür ediyorum tam aradığım biçimde yazmışsınız çok çok teşekkür ederim fakat biraz sorun var sanırım..
    seyranli hocam sizin verdiğin kodlarda sorunları aşağıda sıraladım ilgilenmenizi ümid ediyorum ve şimdiden teşekkürler..
    seyranli hocam sizin yazdıklarınızı su asreste..
    http://www.yetenek-sizsiniz-turkiye.com/seyranli.php
    verdiği hata bu

    PHP Warning: Invalid argument supplied for foreach() in /home/yeteneks/public_html/seyranli.php on line 14

    <?  
    include("baglan.php"); 
    $id = 6;
    $sorgu=mysql_query("SELECT * FROM `il` WHERE `il_id`='".$id."'");
    $veriler=array();
    while($veri_al=mysql_fetch_assoc($sorgu)) {
    $il=$veri_al['il'];
    $ilce=$veri_al['ilce'];
    $koy=$veri_al['koy'];
    $id=$veri_al['id'];
    $veriler[$id[$il[$ilce[$koy]]]]=true;
    }
    foreach($veriler as $id=>$il_bilgileri) {
    foreach($il_bilgileri as $il=>$ilce_bilgileri) {
    echo $id.' '.$il.'<br />';
    foreach($ilce_bilgileri as $ilce=>$koy_bilgileri) {
    echo '>'.$ilce.'<br />';
    foreach($koy_bilgileri as $koy=>$true) {
    echo '>>'.$koy.'<br />';
    }
    }
    }
    }
    ?>
    metadige hocam sizinkide surada
    http://www.yetenek-sizsiniz-turkiye.com/meta.php
    <?  
    include("baglan.php"); 
    $id = 6;
    $sorgu=mysql_query("SELECT * FROM `il` WHERE `il_id`='".$id."' group by ilce,koy"); 
    while ($yaz=mysql_fetch_array($sorgu)){ 
     $iller[$yaz['il']][$yaz['ilce']][] = $yaz['koy']; 
    } 
    foreach($iller as $key => $val){ 
      echo $key.' ili<br>'; 
      foreach($val as $key2 => $val2){ 
        echo '<br>'.$key2.' ilçesi köyleri <br>'; 
        foreach($val2 as $key3 => $val3){ 
          echo $val3.'<br>'; 
        } 
      } 
     } 
    ?>
    Hocam burada bir sorun yok tüm illeri ve ilçeleri alsın fakat her ilçeye ait sadece 10 köy alması için ne yapabilirim.
  • 30-09-2009, 00:15:14
    #5
    site gitti yine
    Arkadaşım son foreach içinde bir limit konulabilir. Ancak daha önce söylediğim gibi sadece tek ile ait kayıtlar için kullan bunu, çünkü gereksiz kayıtlar da çekiliyor sql den. Onun yerine il, ilçe ve köyleri ayrı tablolarda tutup subquery vb. yöntemle yapsan daha iyi olur aslında:

    <?php
    foreach($iller as $key => $val){
      echo $key.' ili<br>';
      foreach($val as $key2 => $val2){
        echo '<br>'.$key2.' ilçesi köyleri <br>';
        $m=0;
        foreach($val2 as $key3 => $val3){
          echo $val3.'<br>';
          $m++;      
          if($m==10) break;
        }
      }
     }
    ?>
  • 30-09-2009, 00:36:21
    #6
    metadige adlı üyeden alıntı: mesajı görüntüle
    site gitti yine
    Arkadaşım son foreach içinde bir limit konulabilir. Ancak daha önce söylediğim gibi sadece tek ile ait kayıtlar için kullan bunu, çünkü gereksiz kayıtlar da çekiliyor sql den. Onun yerine il, ilçe ve köyleri ayrı tablolarda tutup subquery vb. yöntemle yapsan daha iyi olur aslında:
    <?php
    foreach($iller as $key => $val){
      echo $key.' ili<br>';
      foreach($val as $key2 => $val2){
        echo '<br>'.$key2.' ilçesi köyleri <br>';
        $m=0;
        foreach($val2 as $key3 => $val3){
          echo $val3.'<br>';
          $m++;      
          if($m==10) break;
        }
      }
     }
    ?>
    Hocam tamda aradığım buydu fakat unuttuğumuz şey hedef ile aite köyler onları atladık ve onları göster miyor . Yani Ankare merkezde bulunanlar kayıp.

    Tabloları ayırmaya gelince 70 bin verili tabloyu bölmek biraz meşakatli olacak iller bişey değişde ilçelere il idi vermek biraz zor olacak..
  • 30-09-2009, 00:46:49
    #7
    Arkadaşım merkez bilgisi ilçelerde değil mi anlayamadım. Öyle ise zaten alması lazım, değilse nerede, bilgi verirsen bakalım.

    Bu arada tabloyu bölmek o kadar zor değil, olmadı yeni tablo oluşturur, php ile seçip ekleme yaptırırsın kolayca. Veya php my admin den tabloyu kopyalayıp ilceler diye kaydedersin, daha sonra o tablodan il ve köy alanlarını silersin, aynı şeyi köy için yaparsın vs. Yani yapılamayacak bir şey değil. Hem diğer yerlerde de kullanımı daha rahat olur ayrı ayrı olursa.
  • 30-09-2009, 00:52:44
    #8
    metadige adlı üyeden alıntı: mesajı görüntüle
    Arkadaşım merkez bilgisi ilçelerde değil mi anlayamadım. Öyle ise zaten alması lazım, değilse nerede, bilgi verirsen bakalım.
    Bu arada tabloyu bölmek o kadar zor değil, olmadı yeni tablo oluşturur, php ile seçip ekleme yaptırırsın kolayca. Veya php my admin den tabloyu kopyalayıp ilceler diye kaydedersin, daha sonra o tablodan il ve köy alanlarını silersin, aynı şeyi köy için yaparsın vs. Yani yapılamayacak bir şey değil. Hem diğer yerlerde de kullanımı daha rahat olur ayrı ayrı olursa.
    Hocam kopyalamak / silmek basitte hangi ilçe hangi ilin veya hangi köy hangi ilçe ye ait onu nasıl ayıracağım ki her köye ilçe idi ve ilçelere il idi vermeyeceksem nasıl yapacağım.
  • 30-09-2009, 00:57:49
    #9
    Bölme işlemini şu mantıkla yapabilirsin.. Zaten halihazırda ilçelere ait id değerleri olan bir tablon varsa, bir sorgu yaparsın;

    Alıntı
    "SELECT * FROM tablo"
    sonrada bir şablon hazırlarsın while içinde;

    echo "INSERT INTO yenitablo (id,ilce') VALUES ('$id','$ilce')";
    gibi..