Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

MySql de tek sütunda birden fazla kriter

Merhaba arkadaşlar aşağıda örnek verdiğim tabloda tek sütunda birden fazla kriter ile veri çekmek istiyorum.

TELEFON       -    OZELLIK
------------- |---------------
nokia 3310    |    oyun
samsung e250  |    oyun
samsung e250  |    kamera
samsung e250  |    mp3
nokia 5800    |    oyun
nokia 5800    |    kamera
nokia 5800    |    mp3
nokia 5800    |    internet



Çok basitçe böyle bir tabloda: Özellikleri oyun, kamera, mp3 ve internet olanları çekmek istiyorum

("SELECT * FROM telefon WHERE ozellik='oyun' OR ozellik='kamera' OR ozellik='mp3' OR ozellik
='internet'")

Sorgusunu kullandığımız zaman haliyle tablodaki tüm verileri getiriyor benim istediğim bu sorgu sonucunda sadece nokia 5800 sonucunu alayım

("SELECT * FROM telefon WHERE ozellik='oyun' AND ozellik='kamera' AND ozellik='mp3' AND ozellik
='internet'")

Bu sorguyuda denedim ama sonuç alamadım belli ki yanlış bir sorgu

Bu işlemi nasıl yapabilirim fikri olan var mı arkadaşlar?
mysqlde tablo yapısında mı yanlış yapıyorum, yani farklı bir tablo yapısıyla mı halledebilirim ya da bu yapıdaki bir tabloda nasıl bir sorgu kullanabilirim
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap

  • Kesali adlı üyenin fotoğrafı
    9 yıl önce yazılmış
    9 yıl önce güncellenmiş
    208 cevap - 2 soru
    in ile ile yapmalısın aşağıdaki gibi.
    SELECT  * 
    FROM    telefon 
    WHERE   ozellik IN ('oyun','kamera','mp3','internet')
    

    Eğer her ürünü tek kayıtta istiyorsan group by kullanmalısın aşağıdaki gibi
    SELECT  * 
    FROM    telefon 
    WHERE   ozellik IN ('oyun','kamera','mp3','internet') 
    GROUP BY 
            telefon
    


    Anladığım kadarıyla
    • barisbabacanoglu adlı üyenin fotoğrafı barisbabacanoglu
      Cevap için teşekkür ederim ama IN operatörü de OR gibi çalışıyor, o yüzden bu da işimi görmüyor.
      9 yıl önce yazılmış
    • Kesali adlı üyenin fotoğrafı Kesali
      Verilen cevaplara bakınca ancak anlayabildim istediğini. Verdiğin özelliklere uyan telefonu istiyorsun. Group by ve having kullanabilirsin veya nested sql ilki daha basit.

      SELECT  *
      FROM    telefon
      WHERE   ozellik IN ('oyun','kamera','mp3','internet')
      GROUP BY
              telefon
      HAVING  COUNT(*) = 4
      


      Ayrıca tablonu elden geçirsen iyi olur çok fazla mükerrer kayıt var. Aradığın şeyi bulmakta zorlanabilirsin.
      9 yıl önce yazılmış
    • barisbabacanoglu adlı üyenin fotoğrafı barisbabacanoglu
      cevap için teşekkürler ama bu şekilde de sonuç alamıyorum
      9 yıl önce yazılmış
    • Kesali adlı üyenin fotoğrafı Kesali
      Tablonuzun aynısını localde oluşturdum içine aynı verileri girdim. Verdiğim sql kodu nokia 5800 ı tek getiriyor. Tablo yapınız verdiğinizden farklı mı?

      Ayrıca diğer varyasyonlarda da sonuçları filtre edebiliyor. örneğin kamera ve oyun da 5800 ve samsung geliyor. count = 2 seçmeniz gerekiyor sadece.
      9 yıl önce yazılmış 9 yıl önce güncellenmiş
    • barisbabacanoglu adlı üyenin fotoğrafı barisbabacanoglu
      hocam kusura bakmayın yanlış test etmişim bu cevap işimi görmekle kalmıyor bana daha fazlasını da veriyor çok teşekkür ederim ellerinize sağlık
      9 yıl önce yazılmış
    • Kesali adlı üyenin fotoğrafı Kesali
      Rica ederim isiniz görüldüyse ne mutlu bana.
      9 yıl önce yazılmış

Cevaplar

  • 1
    siyahbeyaz adlı üyenin fotoğrafı
    9 yıl önce yazılmış
    472 cevap - 20 soru
    o kod olemi olur. her defasında ozelik ozelik ne istiyorsun ozellikten tam köle etmisinsin..
    şunu kullan kardesim
    ("SELECT * FROM telefon WHERE ozellik IN ('oyun','kamera','mp3','internet'")
    
    • barisbabacanoglu adlı üyenin fotoğrafı barisbabacanoglu
      sağolasın kardeşim cevabın için. Soruda yazmayı unutmuşum ama ben IN operatörünüde kullandım oda istediğim sonucu vermiyor OR ile aynı işlemi görüyor oda.
      9 yıl önce yazılmış
    • siyahbeyaz adlı üyenin fotoğrafı siyahbeyaz
      haa soruyu eksık okumusum asıl sen kbakma..
      soyle dene kardesim

      select * from telefon where ozellik 
      IN('oyun','kamera','mp3','internet') 
      AND telefon='nokia 5800'
      
      9 yıl önce yazılmış 9 yıl önce güncellenmiş
    • barisbabacanoglu adlı üyenin fotoğrafı barisbabacanoglu
      bu şekilde de olmaz çünkü telefon='nokia 5800' bir ziyaretçi tarafından bilinmiyor. nokia 5800 çıkması gereken sonuç, arama sonucu yani
      9 yıl önce yazılmış
  • llorca adlı üyenin fotoğrafı
    9 yıl önce yazılmış
    9 yıl önce güncellenmiş
    45 cevap - 17 soru
    Alıntı!

    Sorgusunu kullandığımız zaman haliyle tablodaki tüm verileri getiriyor benim istediğim bu sorgu sonucunda sadece nokia 5800 sonucunu alayım

    ("SELECT DISTINCT TELEFON FROM telefon WHERE 
                            (
                              (ozellik='oyun' OR ozellik='kamera' OR ozellik='mp3' OR ozellik='internet')
                            )
                            ")
    


    Gibi mi?
    • barisbabacanoglu adlı üyenin fotoğrafı barisbabacanoglu
      Yok bu şekilde manuel olarak seçim yapılmış oluyor.

      yemek konusundan örnek vereyim
      en basitinden içinde domates, kabak, yağ ve tuz olan yemekleri listeletmek istediğimde
      eğer OR kullanırsak bize yüzlerce sonuç verebilir. içinde domates tuz ve yağ olan yemeklerin içinde patlıcan yemeği de var ama ben patlıcanı seçmedim.

      yalnızca içinde seçtiğim malzemeyi barındıran yemekler çıksın istiyorum, domates ve kabağı seçtiğimde eğer yemeğin malzemelerinde kabak yoksa o çıkmasın.

      uzun süredir çıkamadım bu işin içinden.
      9 yıl önce yazılmış
    • llorca adlı üyenin fotoğrafı llorca
      Cevabı güncelledim.
      Sadece DISTINCT eklemen yeterli gibi.
      9 yıl önce yazılmış
    • barisbabacanoglu adlı üyenin fotoğrafı barisbabacanoglu
      denedim ama buda işimi görmüyor kardeşim, DISTINCT tıpkı GROUP BY gibi çalışıyor, benim istediğim sonucu yine vermiyor.
      9 yıl önce yazılmış
    • barisbabacanoglu adlı üyenin fotoğrafı barisbabacanoglu
      Denemiştim zaten sonuç alamıyorum.

      Sanırım mysql sorguları ile değil farklı şeylerle bu sorunu çözebilirim.
      9 yıl önce yazılmış
  • barisbabacanoglu adlı üyenin fotoğrafı
    9 yıl önce yazılmış
    3 cevap - 3 soru
    Bir yapı üzerinden anlatayım hem tablo yapısı hemde sorgulara daha iyi karar verebiliriz umarım.

    Bir yemek tarifleri sitesi düşünelim. Yemek ismi ekleniyor tarif ve malzemeler ekleniyor.
    Tarif arama bölümünde malzemelere göre arama yapıyoruz.
    checkbox'larla seçim yapılan bir listede:
    1. Adım: Domates seçtim = menemen, kabak yemeği, patlıcan yemeği ve domates soslu çorba çıktı
    2. Adım: Tuz seçtim = menemen, kabak yemeği, patlıcan yemeği ve domates soslu çorba çıktı
    3. Adım: Kabak seçtim = kabak yemeği çıktı

    tam olarak böyle birşey istiyorum. Seçtiğim özelliklerin hepsi bir üründe varsa sonuç olarak o ürün çıksın.
    yani içinde kabak yada domates olan yemekleri değil içinde kabak ve domates olan yemekleri bulmak istiyorum.

    Böyle bir mantığa göre tablo yapısı nasıl olmalı sorgularım nasıl olmalı uzun süredir bulamadım bunun cevabını.