ช่วยดู scrpit ดึงข้อมูลหลายตาราง แบบมีเงื่อนไข ให้บ้างนะครับ
สวัสดีครับ รบกวนดู script ให้บ้างนะครับ ขออธิบายโครงสร้างคร่าวๆ นะครับ
สมมุติมีตารางอยู่ 4 ตาราง
ตารางที่ 1 ชื่อ request_test = ประกอบด้วยฟิล์ด refer_no,test_part,name,request_date
ตารางที่ 2 ชื่อ result_bio = ประกอบด้วยฟิล์ด refer_no,test_name,result,test_part หมายเหตุ (test_part=B)
ตารางที่ 3 ชื่อ result_hemato = ประกอบด้วยฟิล์ด refer_no,test_name,result,test_part หมายเหตุ (test_part=H)
ตารางที่ 4 ชื่อ result_micro = ประกอบด้วยฟิล์ด refer_no,test_name,result,test_part หมายเหตุ (test_part=M)
ผมทำหน้าเวบแบบนี้ครับ หน้าแรกใช้ค้นหาและแสดงรายชื่อ หน้าที่สองเป็นการแสดงรายละเอียดจากหน้าแรกโดยคลิกที่หมายเลข refer_no
ปัญหาคือ ผมต้องการให้ถ้า refer_no มี test_part=B ก็ไปดึงรายละเอียดจากตารางที่ 2 มาแสดง
ถ้ามี test_part=H ก็ไปดึงจากตาราง 3 มาแสดง หรือ ถ้ามี test_part=M ก็ไปดึงจากตาราง 4 มาแสดง ประมาณนี้นะครับผมไม่รู้ว่าต้องเขียนแบบไหน
ผมส่ง script ที่ผมทำมาให้ดูด้วยครับ
อันนี้เป็นหน้าแรก ใช้ค้นหาและแสดงรายชื่อ
Code (PHP)
<?
session_start();
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874" />
<title>LAB</title>
</head>
<body>
<form name="frmSearch" method="get" action="<?=$_SERVER['../SCRIPT_NAME'];?>">
<table width="100%" border="0">
<tr>
<th>ใส่ HN หรือ ชื่อ นามสกุล
<input name="txtKeyword" type="text" id="txtKeyword" value="<?=$_GET["txtKeyword"];?>">
<input type="submit" value="Search"></th>
</tr>
</table>
</form>
<?
if($_GET["txtKeyword"] != "")
{
include("../conn/labcon.php");
$strSQL ="select r.refer_no,r.hn,r.name,r.sub_test,r.request_date,r.approved_date,r.test_part from request_test r
left join member m on m.hospname=r.ward
where m.hosid='01' and (r.hn LIKE '%".$_GET["txtKeyword"]."%' or r.name LIKE '%".$_GET["txtKeyword"]."%')
order by r.refer_no desc";
$objQuery = mssql_query($strSQL) or die ("Error Query [".$strSQL."]");
$Num_Rows = mssql_num_rows($objQuery);
$Per_Page = 20; // Per Page
$Page = $_GET["Page"];
if(!$_GET["Page"])
{
$Page=1;
}
$Prev_Page = $Page-1;
$Next_Page = $Page+1;
$Page_Start = (($Per_Page*$Page)-$Per_Page);
if($Num_Rows<=$Per_Page)
{
$Num_Pages =1;
}
else if(($Num_Rows % $Per_Page)==0)
{
$Num_Pages =($Num_Rows/$Per_Page) ;
}
else
{
$Num_Pages =($Num_Rows/$Per_Page)+1;
$Num_Pages = (int)$Num_Pages;
}
$Page_End = $Per_Page * $Page;
IF ($Page_End > $Num_Rows)
{
$Page_End = $Num_Rows;
}
?>
<table width="100%" border="1">
<tr>
<th width="15"> <div align="center"> order_no</div></th>
<th width="15"> <div align="center">hn</div></th>
<th width="200"> <div align="center">name </div></th>
<th width="59"> <div align="center">sub_test</div></th>
<th width="97"> <div align="center">request_date </div></th>
<th width="97"> <div align="center">approved_date</div></th>
</tr>
<?
for($i=$Page_Start;$i<$Page_End;$i++)
{
?>
<tr>
<td><a href=result_b.php?refer_no=<?=mssql_result($objQuery,$i,"refer_no");?> target=_blank><div align="center"><?=mssql_result($objQuery,$i,"refer_no");?></div></a></td>
<td><div align="center"><?=mssql_result($objQuery,$i,"hn");?></div></td>
<td><?=mssql_result($objQuery,$i,"name");?></td>
<td align="center"><?=mssql_result($objQuery,$i,"sub_test");?></td>
<td><div align="center"><?=mssql_result($objQuery,$i,"request_date");?></div></td>
<td><div align="center"><?=mssql_result($objQuery,$i,"approved_date");?></div></td>
</tr>
<?
}
?>
</table>
<br>
Total <?= $Num_Rows;?> Record : <?=$Num_Pages;?> Page :
<?
if($Prev_Page)
{
echo " <a href='$_SERVER[SCRIPT_NAME]?Page=$Prev_Page&txtKeyword=$_GET[txtKeyword]'><< Back</a> ";
}
for($i=1; $i<=$Num_Pages; $i++){
if($i != $Page)
{
echo "[ <a href='$_SERVER[SCRIPT_NAME]?Page=$i&txtKeyword=$_GET[txtKeyword]'>$i</a> ]";
}
else
{
echo "<b> $i </b>";
}
}
if($Page!=$Num_Pages)
{
echo " <a href ='$_SERVER[SCRIPT_NAME]?Page=$Next_Page&txtKeyword=$_GET[txtKeyword]'>Next>></a> ";
}
mssql_close($objConnect);
}
?>
</body>
</html>
อันนี้เป็นหน้าที่ 2 ครับ แสดงรายละเอียด แต่ยังทำแบบที่ต้องการไม่ได้ครับ
Code (PHP)
<?
session_start();
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874" />
<title>LAB Uthaithani Hospital</title>
</head>
<body>
<br>
<?
include("../conn/labcon.php");
[font=Verdana]$strSQL ="select r.refer_no,r.hn,r.name,r.request_date,r.approved_date,b.sub_test,b.test_name
,b.result,r.report_by,r.approved_by from request_test r
left join result_bio b on b.refer_no=r.refer_no
where r.test_part='B' r.refer_no='$refer_no' ";[/font]
$objQuery = mssql_query($strSQL) or die ("Error Query");
?>
<FORM name="form1" method=post action="result_b.php?refer_no=<?php echo "$refer_no"?>">
<table width="100%" border="1">
<tr>
<th width="15"> <div align="center"> order_no</div></th>
<th width="15"> <div align="center">hn</div></th>
<th width="150"> <div align="center">name </div></th>
<th width="59"> <div align="center">sub_test</div></th>
<th width="97"> <div align="center">test_name</div></th>
<th width="15"> <div align="center">result</div></th>
<th width="97"> <div align="center">request_date </div></th>
<th width="97"> <div align="center">approved_date</div></th>
<th width="97"> <div align="center">report_by</div></th>
<th width="97"> <div align="center">approved_by</div></th>
</tr>
<?
while($objResult = mssql_fetch_array($objQuery))
{
?>
<tr>
<td><div align="center"><?=$objResult["refer_no"];?></div></td>
<td><div align="center"><?=$objResult["hn"];?></div></td>
<td><?=$objResult["name"];?></td>
<td align="center"><?=$objResult["sub_test"];?></td>
<td align="center"><?=$objResult["test_name"];?></td>
<td align="center"><?=$objResult["result"];?></td>
<td><div align="center"><?=$objResult["request_date"];?></div></td>
<td><div align="center"><?=$objResult["approved_date"];?></div></td>
<td align="center"><?=$objResult["report_by"];?></td>
<td align="center"><?=$objResult["approved_by"];?></td>
</tr>
<?
}
?>
</table>
</FORM>
<?
mssql_close($objConnect);
?>
</body>
</html>
ขอคุณครับTag : PHP, Ms SQL Server 2005, Reporting Service
Date :
2012-01-23 10:51:03
By :
choked
View :
1266
Reply :
7
โครงสร้าง Field และจำนวนเหมือนกันหมดทั้ง 3 ตารางใช่ไหมครับ
ในหน้าส่งค่า ให้ใช้ if เช็คว่าเป็น test_part อะไร
แล้วให้ส่งค่าชื่อตารางมาอีกค่าหนึ่ง
ในหน้าแสดงผลก็เปลี่ยนจาก FROM table เป็น FROM ตัวแปรชื่อตารางแทนครับ
Date :
2012-01-23 11:01:56
By :
amuropao08
ผมลองทำแล้ว ก็ยังไม่ได้นะครับ Code (PHP)
<?
session_start();
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874" />
<title>LAB Uthaithani Hospital</title>
</head>
<body>
<form name="frmSearch" method="get" action="<?=$_SERVER['../SCRIPT_NAME'];?>">
<table width="100%" border="0">
<tr>
<th>ใส่ HN หรือ ชื่อ นามสกุล
<input name="txtKeyword" type="text" id="txtKeyword" value="<?=$_GET["txtKeyword"];?>">
<input type="submit" value="Search"></th>
</tr>
</table>
</form>
<?
if($_GET["txtKeyword"] != "")
{
include("../conn/labcon.php");
//$objConnect = mssql_connect("10.10.0.15","Uthai2011","Uthai2011") or die("Error Connect to Database");
//$objDB = mssql_select_db("mediexam_uthaithani");
// Search By HN or NAME
$test_part=test_part;
$strSQL ="select r.refer_no,r.hn,r.name,r.sub_test,r.request_date,r.approved_date,r.$test_part from request_test r
left join member m on m.hospname=r.ward
where m.hosid='01' and (r.hn LIKE '%".$_GET["txtKeyword"]."%' or r.name LIKE '%".$_GET["txtKeyword"]."%')
order by r.refer_no desc";
///$strSQL = "SELECT re.refer_no,re.hn,re.name,ro.request_date,ro.sub_test from register re
//LEFT JOIN result_hemato ro ON ro.refer_no=re.refer_no and ro.hn=re.hn
//WHERE ro.Checkapproved='1' and (re.hn LIKE '%".$_GET["txtKeyword"]."%' or re.name LIKE '%".$_GET["txtKeyword"]."%')
//group by re.refer_no,re.hn,re.name,ro.request_date,ro.sub_test order by re.refer_no desc ";
$objQuery = mssql_query($strSQL) or die ("Error Query [".$strSQL."]");
$Num_Rows = mssql_num_rows($objQuery);
$Per_Page = 20; // Per Page
$Page = $_GET["Page"];
if(!$_GET["Page"])
{
$Page=1;
}
$Prev_Page = $Page-1;
$Next_Page = $Page+1;
$Page_Start = (($Per_Page*$Page)-$Per_Page);
if($Num_Rows<=$Per_Page)
{
$Num_Pages =1;
}
else if(($Num_Rows % $Per_Page)==0)
{
$Num_Pages =($Num_Rows/$Per_Page) ;
}
else
{
$Num_Pages =($Num_Rows/$Per_Page)+1;
$Num_Pages = (int)$Num_Pages;
}
$Page_End = $Per_Page * $Page;
IF ($Page_End > $Num_Rows)
{
$Page_End = $Num_Rows;
}
?>
ตรงนี้คือที่ใส่เงือนไขตรวจสอบนะครับ
<?
if ($test_part = B)
{
$table = result_bio;
}
else if ($test_part=BK)
{
$table=result_bloodbank;
}
else if ($test_part=H)
{
$table=result_hemato;
}
else if ($test_part=I)
{
$table=result_immuno;
}
else if ($test_psrt=M)
{
$table=result_micro;
}
else if ($test_part=O)
{
$table=result_outlab;
}
else if ($test_part=U)
{
$table=result_urine;
}
?>
<table width="100%" border="1">
<tr>
<th width="15"> <div align="center"> order_no</div></th>
<th width="15"> <div align="center">hn</div></th>
<th width="200"> <div align="center">name </div></th>
<th width="59"> <div align="center">sub_test</div></th>
<th width="97"> <div align="center">request_date </div></th>
<th width="97"> <div align="center">approved_date</div></th>
</tr>
<?
for($i=$Page_Start;$i<$Page_End;$i++)
{
?>
<tr>
<td><a href=result_b.php?refer_no=<?=mssql_result($objQuery,$i,"refer_no");?> target=_blank><div align="center"><?=mssql_result($objQuery,$i,"refer_no");?></div></a></td>
<td><div align="center"><?=mssql_result($objQuery,$i,"hn");?></div></td>
<td><?=mssql_result($objQuery,$i,"name");?></td>
<td align="center"><?=mssql_result($objQuery,$i,"sub_test");?></td>
<td><div align="center"><?=mssql_result($objQuery,$i,"request_date");?></div></td>
<td><div align="center"><?=mssql_result($objQuery,$i,"approved_date");?></div></td>
</tr>
<?
}
?>
</table>
<br>
Total <?= $Num_Rows;?> Record : <?=$Num_Pages;?> Page :
<?
if($Prev_Page)
{
echo " <a href='$_SERVER[SCRIPT_NAME]?Page=$Prev_Page&txtKeyword=$_GET[txtKeyword]'><< Back</a> ";
}
for($i=1; $i<=$Num_Pages; $i++){
if($i != $Page)
{
echo "[ <a href='$_SERVER[SCRIPT_NAME]?Page=$i&txtKeyword=$_GET[txtKeyword]'>$i</a> ]";
}
else
{
echo "<b> $i </b>";
}
}
if($Page!=$Num_Pages)
{
echo " <a href ='$_SERVER[SCRIPT_NAME]?Page=$Next_Page&txtKeyword=$_GET[txtKeyword]'>Next>></a> ";
}
mssql_close($objConnect);
}
?>
</body>
</html>
ประวัติการแก้ไข 2012-01-23 21:33:25 2012-01-23 21:34:19
Date :
2012-01-23 11:40:07
By :
choked
Date :
2012-01-23 21:38:17
By :
choked
เป็นข้อความใส่ ' หรือ " คร่อมด้วยครับ ใน IF
Date :
2012-01-24 07:42:50
By :
amuropao08
ผมลองแล้วแต่มันไม่ส่งค่าเข้ามานะครับ มันส่งค่าแรกค่าเดียว
Code (PHP)
<?
if ($test_part = "B")
{
$table = "result_bio";
}
else if ($test_part="BK")
{
$table="result_bloodbank";
}
else if ($test_part="H")
{
$table="result_hemato";
}
else if ($test_part="I")
{
$table="result_immuno";
}
else if ($test_psrt="M")
{
$table="result_micro";
}
else if ($test_part="O")
{
$table="result_outlab";
}
else if ($test_part="U")
{
$table="result_urine";
}
?>
<?
include("../conn/labcon.php");
$strSQL ="select r.refer_no,r.hn,r.name,r.request_date,r.approved_date,b.sub_test,b.test_name,b.result,r.report_by,r.approved_by from request_test r
left join $table b on b.refer_no=r.refer_no
where r.refer_no='$refer_no' ";
Date :
2012-01-24 14:27:15
By :
choked
ไม่แน่ใจว่าได้รึยัง
เครื่องหมาย = ใน if ลองเพิ่มเป็น == ดูครับ
ถ้าเปรียบเทียบแบบนี้ลองใช้ switch ดูไหมครับ
Date :
2012-01-31 10:08:48
By :
amuropao08
Load balance : Server 02