MySQL nasıl üç alanları ile bir ara formdan birden fazla değerleri almak mı?

2 Cevap php

Ben bir iki tablo var:

  1. Müşteriler
  2. Şehirler

Sonra arama şeklinde üç alanları var:

  1. Müşterinin adı ile doldurmak için bir metin giriş formu
  2. Onlar (tablo şehirler) aramak istediğiniz şehri seçmek için bir seçim kutusu
  3. Kullanıcı aramak için istediği ana iş seçmek için başka bir seçim kutusu (iş istemciler tabloya dahil edilmiştir)

Form alanının seçimlere bağlı olarak bu iki tablodan arama yapacaktır.

Ben kullanıcı seçimlere bağlı olarak birden fazla SQL querys yapıyor düşünüyorum.

Sorun belki kullanıcı müşteri, ya da belki de irade adı ile giriş formu doldurunuz olmaz olduğunu, ancak vb, bir şehir seçin olmaz

Yani kullanıcı seçimine bağlı olarak birden fazla sql querys göstermek için çoklu IFS yapmak zorunda olacak? belki daha az kafa karıştırıcı bir çözüm var ...

2 Cevap

Belki veritabanı yapısı size yardımcı değişmiş olabilir. Örneğin, ben Kentler ve Müşteriler arasında bir ilişki var sayıyorum. Işletmeler gibi aynı iş ile birden fazla müşteri olabilir bu durumda "Tech" veya "Ara" gibi bir şey geliyor? Ayrı bir tablo işletmelerin taşıma ve daha sonra bu referans değer olabilir. : Sonra gibi basit bir sorgu olabilir

SELECT *
FROM clients
WHERE clients.city = {form result: cities.id}
AND clients.business = {form result: businesses.id}
ORDER BY clients.name
LIMIT 0, 30

Şimdi kullanıcı, iki seçeneğiniz var alanlarından birinde (örneğin şehir) doldurun değil varsayarak: kaldırmak hangi durumda, kullanıcı girişi doğrulayarak bunu doldurmak veya bir joker olarak kullanmak için onları zorlamak {[(0) sorgudan]} fıkra. Eğer Şehirlerden bir id sizin <select> seçenekleri değerlerini veriyoruz varsayarsak.

Programlı Ben bu durumda sorgu oluşturmak istiyorum:

$queryStr = 'SELECT * FROM clients';
if (!empty($_POST['city']) && !empty($_POST['business'])) {
    $queryStr .= ' WHERE city = ' . filter($_POST['city']) . ' AND business = ' . filter($_POST['business']);
} elseif (!empty($_POST['city'])) {
    $queryStr .= ' WHERE city = ' . filter($_POST['city']);
} elseif (!empty($_POST['business'])) {
    $queryStr .= ' WHERE business = ' . filter($_POST['business']);
} else {
    // pass
}
$queryStr .= ' ORDER BY name LIMIT 0, 30';

Filtre filtreleme yönteminin sizin tercihinizdir nerede.

Sadece kriterlerine DB sorgulamak. Müşteri / şehirler gerçekten var ise, o zaman başka türlü sorgu boş bir set dönecektir, göstermek gerekir. Bu kadar kolay, bunlardan birini varlığını doğrulamak gerek yok - Kullanıcı örneğin mevcut bir şehir adı ile gelip edebilmek için yeterince akıllı olmalıdır.

Yapmanız gereken tek şey () mysql_real_escape_string etmektir.