Dinamik kullanıcının seçimlere göre SQL sorgusu oluşturmak nasıl?

3 Cevap php

Kullanıcıların uygun kişileri bulmak için veritabanını sorgulamak için kullanılacak çeşitli özelliklerini seçebileceğiniz kullanarak bir GUI oluşturmak gerekir. Ben Kullanıcının seçimlerine göre dinamik veritabanı sorgu oluşturmak için nasıl fikirler arıyorum.

Sorgu çeşitli alanları içerir, ancak fikir almak için ben bir örnek olarak aşağıda olanların sadece üç içerecektir:

  • Occupation - n işgal dizelere 0 olabilir. Işgal dizeleri verilirse, bunlardan biri maç var.

  • Age - yaş olarak verilebilir:

    1. tam eşleşme (30)
    2. aralığı (örneğin 30-40)
    3. den daha az bir değer (-40)
    4. bir değerden daha fazla (30 -)

Yaş parametre sorguda isteğe bağlıdır. Buna ek olarak, kullanıcı yaş gerekli bir parametre olup olmadığını belirleyebilirsiniz. Bu gerekli değildir, ve bir kişinin yaşı onun / profili yoksa, yaş kriterler bu kişi için göz ardı edilir.

  • Height - yaş olarak benzer

Example queries:

Resim kriterleri verilmiştir:

select * from persons

Sadece işgal verildi:

select * from persons where occupation = 'dentist'

Çeşitli meslekler verilmiştir:

select * from persons where (occupation = 'dentist' or occupation = 'engineer')

Yaş değerinden daha büyük olarak verilmiştir ve bu kişinin profilinde bulunması gereken oluyor:

select * from persons where age >= 30

Yükseklik bir dizi olarak verilmiştir ve bu kişinin profilinde bulunması gereken değil:

select * from persons where (height is null or (height >= 30 and height <= 40))

Farklı kriterlerin kombinasyonu:

select * from persons where occupation = 'dentist' and age >= 30 and (height is null or (height >= 30 and height <= 40))

Zaten dizeleri olarak sorguları üretebilen kod hayata geçirdik, ama kesinlikle çok hoş değil. Bunu başarmak için en etkili ve en güzel yolu ne olurdu fikirler arıyorum.

3 Cevap

Bu doğrudan cevap vermez, ama burada onun yerine bu gibi sorgu yazma sizin için küçük bir ipucu şudur:

select * from persons where (occupation = 'dentist' or occupation = 'engineer')

Bu deneyin:

select * from persons where occupation IN ('dentist','engineer')

Bu daha kolay okunur ve PHP komut dosyası oluşturmak için kolaydır.

Eğer oluşturulan olabilir sorguları sonlu sayıda dokunuşlar görünüyor, bu yüzden çağrı ve parametre değerlerini kurmak için hangi çalışmak için seçim mantığını kullanarak sonra, tüm parametreleri ile bu yazı öneririz.