Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
TERJAWAB [solved] mencari inhouse client
#1
malam semua, malam mas Jawaad...

saya ada kasus begini:
si a dirawat dari 20/01/2010 sampai 30/01/2010
si b dirawat dari 26/01/2010 sampai 27/01/2010
si c dirawat dari 25/01/2010 sampai 29/01/2010 dan
si d dirawat dari 01/01/2010 sampai 25/01/2010

kalau sekarang tanggal 25/01/2010, sql query-nya gimana ya untuk mengetahui siapa saja yang sekarang sedang/masih dirawat ?

ditunggu pencerahannya, terima kasih.
Reply
#2
Asumsikan data struktur seperti ini ya..
Nama tabel adalah `pasien` dan data yg sudah ada adalah sbb.:

PHP Code:
---
    
nama    tgl_cek_in   tgl_cek_out
    
--------------------------------
    
a       2010-01-20   2010-01-30
    b       2010
-01-26   2010-01-27
    c       2010
-01-25   2010-01-29
    d       2010
-01-01   2010-01-25 

kode query untuk mengecek pasien yg masih dirawat pada tanggal 25/01/2010 adalah berikut:
PHP Code:
$sql "SELECT * FROM `pasien` WHERE ('2010-01-25' BETWEEN `tgl_cek_in` AND `tgl_cek_out`)"

sedangkan untuk mengecek realtime hari ini adalah sbb:
PHP Code:
$sql "SELECT * FROM `pasien` WHERE (NOW() BETWEEN `tgl_cek_in` AND `tgl_cek_out`)"

silahkan dicoba..
Reply
#3
sorry kurang info dari saya,,, databasenya MS SQL...

saya pake :
PHP Code:
$curdate=date('n/j/Y');
$searchs="SELECT * FROM pasien WHERE (tgl_cek_in<='$curdate' AND tgl_cek_out>='$curdate')"
jalan, cuma kok rada aneh gitu, sementara memang saya ingin pake 'BETWEEN'...
Reply
#4
r45 Wrote:sorry kurang info dari saya,,, databasenya MS SQL...

saya pake :
PHP Code:
$curdate=date('n/j/Y');
$searchs="SELECT * FROM pasien WHERE (tgl_cek_in<='$curdate' AND tgl_cek_out>='$curdate')"
jalan, cuma kok rada aneh gitu, sementara memang saya ingin pake 'BETWEEN'...

aneh nya gimana ya?
oya cara yg dipakai diatas dgn cara 'BETWEEN' pada prinsipnya sama saja, hasilnya jg sama, BETWEEN hanya semacam shortcut perintah >= dan <=.
Reply
#5
anehnya buat saya aja, karena tadinya saya ingin memanfaatkan fungsi bawaan dari databasenya (CURDATE()? NOW()?) digabung dengan 'BETWEEN' Smile

kalo di mysql saya biasa pake fungsi CURDATE() tapi pas dicoba di mssql gak jalan (mungkin karena format data di databasenya yang m/d/Y) akhirnya saya pake tambahan yang $curdate itu...

mengingat data yang cukup besar, maksud saya ingin coba lihat execution time kalo menggunakan fungsi2 bawaan database untuk akhirnya saya akan pakai yang execution timenya terendah.

tapi setelah saya coba dengan cara
PHP Code:
$searchs="SELECT * FROM pasien WHERE ($curdate BETWEEN tgl_cek_in AND tgl_cek_out)"
ternyata hasilnya juga gak keluar...

akhirnya saya masih bertahan di
PHP Code:
$curdate=date('n/j/Y');
$searchs="SELECT * FROM pasien WHERE (tgl_cek_in<='$curdate' AND tgl_cek_out>='$curdate')"
Reply
#6
oww, berarti di MS SQL tidak support 'BETWEEN', atau mungkin ada cara lain untuk perintah BETWEEN nya pada MS SQL.

btw, berarti dengan menggunakan perintah yg terahir itu udah berlanjan dan sesuai hasil query nya?
Reply
#7
'BETWEEN' ada mas, hanya mungkin saya yang salah dalam logikanya...
dan yang saya kira 'CURDATE()' ternyata yang ada adalah 'GETDATE()'...
akhirnya codenya sepreti ini:
PHP Code:
<?php
    $m_server
="dbserver";
    
$m_database="dbname";
    
$m_user="user";
    
$m_password="password";
    
$connection=odbc_connect("DRIVER=SQL Server;SERVER=".$m_server.";UID=".$m_user.";PWD=".$m_password.";DATABASE=".$m_database.";Address=".$m_server.",1433","","");
    
$order=$_GET['order'];
    
$curdate=date('n/j/Y');
    
$searchs="SELECT * FROM yable_name WHERE (arrival<='$curdate' AND departure>='$curdate') AND co_date='1/1/1900' AND room_no<>'' AND room_no<>'DUMY' ORDER BY $order";
    
$search=odbc_exec($connection,$searchs);
    
$number=1;
    echo 
"<table width=100% border=0 cellspacing=0 cellpadding=0><tr><td align=center>";
    echo 
"<table border=0 width=100% cellspacing=0 cellpadding=0><tr><td align=center><span style='font-family:tahoma, verdana, arial; font-size:18px; color=#0059B5'><b>Inhouse Guest List for TODAY (".date('F j, Y',strtotime($curdate)).")</b></span></td></tr></table>";

    echo 
"<table class=dot border=0 cellspacing=0 cellpadding=0><tr><td>";
    echo 
"<table border=0 cellspacing=1 cellpadding=3>";
    echo 
"<tr bgcolor=#C0C0C0><td align=center><b>No.</b></td>";
      if(
$order=="account_no") echo "<td align=center><b>Account</b></td>";
      else echo 
"<td align=center class=darkgray><a href=?command=fo_guest-list&order=account_no>Account</a></td>";
      if(
$order=="room_no") echo "<td align=center><b>Room</b></td>";
      else echo 
"<td align=center class=darkgray><a href=?command=fo_guest-list&order=room_no>Room</a></td>";
      if(
$order=="type") echo "<td align=center><b>Type</b></td>";
      else echo 
"<td align=center class=darkgray><a href=?command=fo_guest-list&order=type>Type</a></td>";
      if(
$order=="arrival") echo "<td align=center><b>Arrival</b></td>";
      else echo 
"<td align=center class=darkgray><a href=?command=fo_guest-list&order=arrival>Arrival</a></td>";
      if(
$order=="departure") echo "<td align=center><b>Departure</b></td>";
      else echo 
"<td align=center class=darkgray><a href=?command=fo_guest-list&order=departure>Departure</a></td>";
      echo 
"<td align=center><b>Day</b></td>";
      if(
$order=="first_name") echo "<td align=center><b>Name</b></td>";
      else echo 
"<td align=center class=darkgray><a href=?command=fo_guest-list&order=first_name>Name</a></td>";
      if(
$order=="company") echo "<td align=center><b>Company</b></td>";
      else echo 
"<td align=center class=darkgray><a href=?command=fo_guest-list&order=company>Company</a></td>";
    echo 
"</tr>";
    
$bgcolor=array('#F4F9FF','#DFE4F4');
    
$i=0;
    while(
$data=odbc_fetch_array($search)){
      echo 
"<tr onMouseOver=\"this.bgColor='#C0C0C0'\" onMouseOut=\"this.bgColor='$bgcolor[$i]'\" bgcolor=$bgcolor[$i]><td align=right>".$number."</td>
              <td>"
.$data[account_no]."</td>
              <td align=center>"
.$data[room_no]."</td>
              <td align=center>"
.$data[type]."</td>";
              
$arr=date('Y/m/d',strtotime($data[arrival]));
              
$dep=date('Y/m/d',strtotime($data[departure]));
              
$arr2=strtotime($data[arrival]);
              
$dep2=strtotime($data[departure]);
              
$day=round(($dep2-$arr2)/(60*60*(24)))+1;
      echo 
"  <td>$arr</td>
              <td>
$dep</td>
              <td align=right>"
.number_format($day,0,',','.')."</td>
              <td>"
.$data[first_name]."</td>
              <td>"
.$data[company]."</td>
            </tr>"
;
      
$number++;
      
$i++;
      if(
$i>1$i=0;

    }
    echo 
"</table>";
    echo 
"</td></tr></table>";
    echo 
"</td></tr></table>";
    
odbc_close($connection);
    
?>
maaf kepanjangan, mungkin ada yang perlu script sederhana ini untuk bahan perbandingan...
Reply
#8
oww begitu ya.. makasih ya atas share info nya Smile
Reply
#9
setelah saya lihat lagi script yang saya lampirkan,,, jadi malu...
xixixi,,, sederhana banget ya Smile

anyway, yang penting solved,,, thx Cool musik Yihaa
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)