Sql sorgu - if ifadesi

4 Cevap php

Ben kullanıcılar için bir "ileri" arama alanını yapmayı deneyin. (Kullanıcıların kısa arama listesi için 5-8 alanı var ..)

Ben alanı boş değil yayınlanmıştır bağlı hangi sorguyu oluşturmak zorunda düşünüyorum.

Bu benim orijinal sorgu, ama bu ile, i tablodan tüm satır var ..

$query = "select * from MYTABLE where FIELD1 LIKE '%$sample1%' OR FIELD2 LIKE '%$sample2%' OR FIELD3 LIKE '%$sample3%' OR FIELD4 LIKE '%$sample4%' order by name";

Yani ben sorguda IF deyimi kullanmak zorunda düşünüyorum, ama ben her zaman hata var nasıl, bilmiyorum. Ve bir şey daha: ths kullanıcı "sample4" doldurmanız ise, o zaman "Örneği1" doldurmak gerekir. I bu nasıl kontrol edebilirim?

Yardımınız için teşekkür ederim.

4 Cevap

Ayrıca bunu yapmak için dizi kullanabilirsiniz, o daha bu şekilde organize edilecektir. Her yerde durum için tek bir dizi öğe saklayın, ve SQL oluştururken nihayet onlara katılın.

<?

$fields = array('field1', 'field2', 'field3');
// Changed this to 0, so it won't return all rows
// but also the default array element prevent the statement to fail when 
// no search is being specified at all
$wheres = array(0);
foreach ($fields as $fieldname) {
  // Get user input
  $search = $_GET[$fieldname];
  // add condition to wheres if not empty
  if (!empty($search)) {
    $wheres[] = $fieldname . ' LIKE "%' . mysql_real_escape_string($search)  . '%"';
  }
}

// Join the wheres conditions using OR, (or AND)
$query = 'select * from MYTABLE where' . join(' OR ', $wheres);

?>

Sen bir "tam metin arama" motorunu uygulama düşünmelisiniz.

MySQL has a "FULLTEXT" search feature - you can start learning about it here: See also this article: Developing A Site Search Engine With PHP And MySQL

Belki yerine dahil olmak üzere tüm kullanıcı dolduran sadece filtre kısıtlamaları içeren bir sorgu oluşturmak için daha iyi olurdu.

Eğer çözümü uygulayın tercih ederseniz, SQL yapıyı kullanabilirsiniz

CASE WHEN

this MS SQL ve this MySQL için bakınız

Böyle "değil null" operatörünü kullanarak deneyebilirsiniz:

select * 
from mytable
where 
(field1 is not null and field1 like '%test%') or 
(field2 is not null and field2 like '%test%') or 
(field3 is not null and field3 like '%test%') or
(field4 is not null and field4 like '%test%')
order by name

Ayrıca bakınız Handling MySQL NULL Values