tablodan filtre ile veri çağıracağım fitre boşsa ne olacak

Web tabanlı uygulama geliştirme araçları(PHP, ASP vb...) ile ilgili konuları buraya yazabilirsiniz.
Cevapla
kazimates
Üye
Mesajlar: 332
Kayıt: 01 Tem 2005 12:40
Konum: Kıbrıs
İletişim:

tablodan filtre ile veri çağıracağım fitre boşsa ne olacak

Mesaj gönderen kazimates »

isim, soyisim gibi verileri filtre olarak seçtim ve
ad=isim
soya=sofyisim gibi variablelara atadım diyelim

select isim, soyisim from tablex where isim=ad and soyisim=soya

yazınca ve şayet variablelara mantıklı değerler koyarsam yani bunlar tabloda varsa buluyor peki ama kullanıcı filtreyi sadece ada göre veya soyisime göre arayacaksa ne olacak? bu durumda bana adı ne olursa olsun soyadı=ahmet oloanları sql de nasıl tanımlayacağım?

Kod: Tümünü seç

 global $database;
   
   // Get data from filter page
$_teamname=$_POST['teamname'];
$q= "SELECT teamname FROM teamletter WHERE id=\"$_teamname\" ";
$result = $database->query($q);
$num_rows= mysql_result($result);
$teamname = mysql_result($result,"teamname");

$_tailname=$_POST['tailname'];
$tname=$_tailname;

$_reportdate1=$_POST['reportdate'];
$_reportdate2=$_POST['reportdate2'];
$_partnumber=$_POST['partnumber'];
$_snoff=$_POST['snoff'];
$_snon=$_POST['snon'];
  
   $q = "SELECT tailname.tailname as ucakad , faultyreporter.ekipno, faultyreporter.reportdate, faultyreporter.recorddate, faultyreporter.report, faultyreporter.time, faultyreporter.process, faultyreporter.partnumber, faultyreporter.serialnumberoff, faultyreporter.serialnumberon, faultyreporter.recorderuserid FROM faultyreporter INNER JOIN tailname ON tailname.id = faultyreporter.tailid WHERE faultyreporter.ekipno=\"$teamname\" AND  faultyreporter.tailname=\"$tname\" ";
   
    $result = $database->query($q);
/* Error occurred, return given name by default */
   $num_rows = mysql_numrows($result);
   if(!$result || ($num_rows < 0))
   {
      echo "Error displaying info";
      return;
   }
   if($num_rows == 0)
   {
      echo "Database table empty";
      return;
   }
   echo "<table align=\"left\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\n";
   echo "<tr><td><b>tailid</b></td><td><b>ekipno</b></td><td><b>reportdate</b></td><td><b>recorddate</b></td><td><b>report</b></td><td><b>time</b></td><td><b>process</b></td><td><b>partnumber</b></td><td><b>serialnumberoff</b></td><td><b>serialnumberon</b></td><td><b>recorderuserid</b></td></tr>\n";
   for($i=0; $i<$num_rows; $i++)
   {
      $tailid = mysql_result($result,$i,"ucakad");
      $ekipno  = mysql_result($result,$i,"ekipno");
      $reportdate   = mysql_result($result,$i,"reportdate");
      $recorddate  = mysql_result($result,$i,"recorddate");
      $report = mysql_result($result,$i,"report");
      $time  = mysql_result($result,$i,"time");
      $process   = mysql_result($result,$i,"process");
      $partnumber  = mysql_result($result,$i,"partnumber");
      $serialnumberoff = mysql_result($result,$i,"serialnumberoff");
      $serialnumberon  = mysql_result($result,$i,"serialnumberon");
      $recorderuserid   = mysql_result($result,$i,"recorderuserid");

      echo "<tr><td>$tailid</td><td>$ekipno</td><td>$reportdate</td><td>$recorddate</td><td>$report</td><td>$time</td><td>$process</td><td>$partnumber</td><td>$serialnumberoff</td><td>$serialnumberon</td><td>$recorderuserid</td></tr>\n";
   }
   echo "</table><br>\n";
}
Şunuda bir düşünmek belki daha iyi olabilir. Tablodaki veriyi 5 farklı alndaki kriter göre sorgulamam gerekebilir. teamname, tailname, reportdateilk, reportdateson, snoff, snon veya partno gibi ama kullanıcı filtrelerin 1 tanesinide doldurabilir hepsinide doldurabilir bu durumda sql cümlemiz nasıl olacak? 2 tanesini seçmişse ve diğerlerinin filtre değerini boş bırakmışsa sql cümlesi nasıl yazılacak?
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: tablodan filtre ile veri çağıracağım fitre boşsa ne olacak

Mesaj gönderen aslangeri »

s.a.
iki yol var.
birincisi sql i dinamik oluşturursun. filtreleyeceğin değere bakarsın boşsa filitreye eklemezsin.
(bunun için forumda bolca örnek var.
ikincisi sql sabit olur değerleri parametrelerde alırsın. parametreler için boşluk kontrolu eklersin.

Kod: Tümünü seç

where ((adi=:prm_adi) or (''=:prm_adi)) and
((sirano=:prm_sirano) or (-1=:prm_sirano))....
gibi
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
kazimates
Üye
Mesajlar: 332
Kayıt: 01 Tem 2005 12:40
Konum: Kıbrıs
İletişim:

Re: tablodan filtre ile veri çağıracağım fitre boşsa ne olacak

Mesaj gönderen kazimates »

öncelikle hepinizden özür dileyerek ve konuya tam olarak vakıf olamadığımdan dolayı tekrar yazmak istedim. php ile mysql den veri çağıracağım ve bunu ekranda göstereceğim. rapor filtreleme formumdan ad, soyad, yaş, dept, sırano vs gibi bir takım variablelar olduğunu farzettim ve bunları listbox tarzı bir alanda ekranda show edip bsonra bunları post komutu ile listele formuna post ettim. burada sorun şurada çıktı. kullanıcı sadece ad seçip filtreleme yapabilir veya hem a hemde dept veya bunların hepsi veya karışık bir kaçı bu durumda sel cümlem nasıl olacakda data yı retrieve edebilecek. Kullanıcı örnek olarak hiçbirini seçmediyse sql cümlem database deki tüm kayıtları çağırmalı veya hem ad hem dept seçt,iyse bu durmda ad ve dept seçilmiş değişken e göre arama yapıp karşıma çıkarmalı. bu teknik olarak nasıl çağrılıyor bu tip filtreleme ile retrieve yapmanın tam bir teknik terimi varmı? yada elinizde bunun için php den yapılmış bir uygulamanız varsa koduu paylaşabilirmisiniz? bu arada seçim yapılmamış alanların değeri post edereken 0 olarak atanıyor
şimdiden teşekkür ederim.
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: tablodan filtre ile veri çağıracağım fitre boşsa ne olacak

Mesaj gönderen mkysoft »

bunun için slq nizi şu şekilde düzenleyin
sql = '... where 1 = 1'
if (postalan1 <> '') {
sql= sql + ' and alan1=postalan1'
}

tüm post edilen değerleri if bloğu şeklinde ekleyin. böylece kullanıcıların hangisini boş bıraktırklarının sizin için bir önemi olmaz.
Cevapla