Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

mysql birden fazla şehir için girilen veriyi nasıl listeletirim

Konu, 'PHP' kısmında nco09 tarafından paylaşıldı.

  1. nco09

    nco09 Üye

    Kayıt:
    19 Şubat 2014
    Mesajlar:
    30
    Beğenilen Mesajlar:
    1
    merhaba.php de bir galeri sitesi yapıyorum.örneğin bir araç var ve bu aracın bilgilerini girerken 81 ilden aracın yayınlanmasını istediğim illeri seçeceğim.sonra da sitemde vatandaşlar o illeri seçince o araçlar yayınlanacak.mesela x model y model ve z model 3 adet aracım var.bu araçları girerken x model için aydın,izmir ankara illerini seçtim.y model aracı girerken hakkari,denizli,niğde illerini seçtim ve z model aracımı girerken de muğla,bolu ve sakarya illerini seçtim.sitemde 81 ili listeleteceğim ve örneğin aydın da izmir de ankara da tıklansa x model aracım görünecek.veya hakkari,denizli veya niğde tıklandıgında y model aracım görünecek.mantıgını bulamadım.nasıl yapabilirim.kısacası 81 ilden hangi illere tıklarsam o iller içerisine girilen araçlar listelenecek.şimdiden teşekkür ederim
     
  2. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    897
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    PHP diye soruya hiç bakmamıştım ancak soru dili ilgilendiren bir soru değil. Uygulama tasarımı ve birazda DB tablo tasarımını ilgilendiriyor.

    Temel istenen ne.?
    Bir Araba kaydı, sadece belli illerde arayanlara görünsün isteniyor.

    Karmaşık bir yapı değil, ekstra hammaliye gerekiyor.

    Arabaya ait,
    1) Aracın bulunduğu il kaydı olmalı. Buna detay bilgilerin olduğu ana kayıt diyelim ve ana tabloda dursun.
    2) Kaç ilde gösterilecekse o illere ait isimlerin olduğu ek kayıtlar olmalı, il sayısı belli olmadığından, bu bağlı kayıtlar ek tabloda dinamik olarak tutulacak demektir, tabi ana kayda bağlamak için bir key ile tutulacak ve sıra no olacak eşsiz(unique) liği sağlamak için.

    Fazla detaylı anlatıyorsam kusura bakmayın. Kendi anlayabileceğim şekilde yazıyorum.

    TEST_SIL.png

    Araba kayıt olurken, illeri seçtirdin ve tablolara kayıt ettin.

    Şimdi, siteye giren bir müşteriye bilgiyi nasıl göstereceksin, onun mantığını görelim.

    Müşteri 09 plaka numaralı ili seçti. Listele dedi.
    Önce ek tabloya gideceksin ve bütün 09 plaka numaralı kayıtları alacaksın, sonra o kayıtlardaki ArabaKayıtNo key alanından, ana tablodaki araba bilgilerini alıp göstereceksin.

    Ek Tablo da listelenecekİl Plaka NO ya göre index oluşturman gerek, bu önemli.

    Tabi araba kaydını yapan kişi, tüm ülkede gösterilsin diyebilir. Bugün demezse 3 yıl sonra böyle bişey isteyebilirler.
    O sebeple tüm ülkede gösterilecek arabaları, ek tabloya kaydederken hiç olmayan bir plakaNo ile kaydetmelisin. Mesela sıfır veya 9999 gibi.

    O zaman örneğe geri döneyim,
    Müşteri 09 plaka numaralı ili seçti. Listele dedi.
    Ek tabloya giderek hem 09 plakaNolu kayıtları alacaksın hemde 9999 nolu kayıtları.

    Fazla düşünmedim, kafam kendi işimle dolu olduğundan dolayı, umarım mantık hatası yapmamışımdır.

    NOT: Ben sadece birden fazla il olayını ilgilendiren kısımları yazdım, ana tabloda marka model yıl filan gibi keyler indeksler konacaksa bu konulara girmedim. Sadece sorulana eğildim.
     
    Son düzenleme: 24 Nisan 2018
    Çarkçı bunu beğendi.
  3. nco09

    nco09 Üye

    Kayıt:
    19 Şubat 2014
    Mesajlar:
    30
    Beğenilen Mesajlar:
    1
    cevabın için tşk ederim..peki benim şu andaki sistemimde veritabanımda araçlar isimli bir tablom var ve bu tablonun içinde aracın cinsi modeli.... vb. sütıunlar ve aynı tabloda iller diye bir sütun var.Ben aracı kaydederken iller diye bir tagım var ve ben oradan istediğim illeri seçiyorum.ve seçtiğim tüm illerin id noları araçlar tablomdaki iller sütununa kayıt ediliyor.mesela ford 1.6 taunus diye bir aracım var diyelim.bu araca ben 4,5 adet şehir seçtim.araçlar tablomdaki iller sütununa 32,56,78,54 diye iller tablomdaki illerin id noları kayıt ediliyor.ben yukarıdaki sorumu buna göre tekrar sorsam.?yani 32,56,78 ve 54 id nolu illeri seçtiğimde aracı nasıl getirebilirim ekrana?
     
  4. Çarkçı

    Çarkçı Üye

    Kayıt:
    6 Nisan 2018
    Mesajlar:
    30
    Beğenilen Mesajlar:
    4
    Şehir:
    Mersin
    Temel bilgi vermesi açısından aşağıdaki şekilde çok kısa bir bilgi paylaşıyorum.

    PHP: $_GET - Manual

    araba.php:
    Kod:
    // URL: araba.php?il=33 (Mersin'e ait verileri listelemek istiyorum.)
    // Yukarıdaki adrese girildiğinde, $_GET['il'] = 33 olarak gelecektir.
    if (isset($_GET['il'])) {
    // SELECT * FROM 'arabalar' WHERE sehir =  $_GET['il'];
    // Yukarıdaki gibi bir sorguyla, istediğiniz yere ait verileri çekip bu sayfada istediğiniz şekilde gösterebilirsiniz.
    }
    
     
    sedirAğacı bunu beğendi.
  5. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    897
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Bu kısmı artık kullandığın server dilini ve mySql i ilgilendiriyor, PHP bilmiyorum, mySql kullanmadım.

    Ama mantığı şu.
    Ziyaretçi siteye girdi. Hangi ili listelemek istiyorsa sayfada seçti. Listele butonuna bastığında, seçtiği il veya iller, senin iller tablondaki her bir kaydın il alanında varmı kontrol edeceksin. Tek il seçmişse kolay, MSSQL de iller LIKE "%36%" diye seçebiliyorsun. Ama TEK SEFERDE çok il seçtiriyorsan onuda mySql ile tek select de yazmanın yolu vardır.
    Basit ama veri tabanını yoran yolu, ziyaretçinin seçtiği her bir ili tek tek tablodan çekmek. 3 il seçmişse 3 kez tabloyu select edeceksin.

    Yanlız seçtiğin yöntem, tablo kayıtların sayısı milyonlara gelince gümler söyleyeyim.
    Çünki tabloda iller alanını çok select ediyorsun ve tabloda iller bilgisinde bir düzen olmadığından işe yarar şekilde indeksleyemezsinde.

    illere göre SAĞLIKLI indeks olmayıncada, tabloda kayıt sayısı arttıkça select işi yavaşlar.

    1 milyon kayıt var, ziyaretçi olarak ben girdim diyelim.

    21,34,56 diye üç il seçtim. (tek seferde birden fazla il seçtiriyorsan.)
    senin tabloda iller alanındaki bilgiler nasıl?
    12
    23,45,78,34,
    06,14,66,
    ...

    filan diye,
    bunu indeksle desen, alandaki ilk ile göre indeksler. Ama select işlemi alandaki ilk il numarasına göre değil. Hali ile her select tabloyu baştan sona dolaşır, hemde en yoran komutlardan biri olan LIKE ile.

    Tabloda kayıt sayısı yüz bini filan aşmayacaksa sorun yok, çünki artık hem veri tabanları hem işlemciler çok güçlendi.
    Tabi DB admin olmadığımdan ve bilgilerim güncel olmadığından 100.000 değilde belki 1milyon kayıtta yavaşlayacak yada 10milyon, bilmiyorum. Tahminen yazdım.

    İller alanına göre select edilmeseydi sorun değildi.

    Yada ziyaretçiye her seferinde tek il seçtiriyorsan bu tablo yapısı idare eder. Ama doğru yöntemin ilk anlattığım yöntem olduğunu bilmelisin, çünki sağlıklı bir indeks yapısı var. Senin yönteme göre belki 2 kat veri tabanında yer tutacak, belki biraz daha fazla kod yazacaksın. Ama site çalışmaya başlayınca, kayıt sayısı arttıkça hız farkı çok fark edilir.

    Soruyu yanlış anladı isem tüm yazdıklarımı unutun. Son bi kaç yıldır çok hata yapıyorum. :rolleyes: erken yaşlandı beynim...:oops:
     
    Son düzenleme: 26 Nisan 2018