SQL Join 2ตาราง โดย2ตารางนี้ มีฟิลด์เหมือนกัน จะทำยังไงกับการค้นหาใน datatable ค่ะ

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา SQL Join 2ตาราง โดย2ตารางนี้ มีฟิลด์เหมือนกัน จะทำยังไงกับการค้นหาใน datatable ค่ะ

SQL Join 2ตาราง โดย2ตารางนี้ มีฟิลด์เหมือนกัน จะทำยังไงกับการค้นหาใน datatable ค่ะ
ต้องการโชว์ข้อมูล 2 ตาราง ซึ่งมีฟิลด์เหมือนกัน เลือกโชว์ทุกข้อมูลโดยการใช้ UNION

ตาราง sale จะเป็นข้อมูลใบเสนอราคา
ตาราง cc_edit_saleจะเป็นข้อมูลใบเสนอราคาที่แก้ Sacode จะเป็นตัวเลขลงท้ายด้วย Rev เช่น CC57/25Rev1, CC57/25Rev2
จึงจำเป็นต้องโชว์ข้อมูลทั้ง2ตาราง




แล้วหากต้องการ Where Sacode like '%CC57%' คือค่ามาทั้งหมดเลยค่ะ ไม่ใช่เฉพาะที่ต้องการหา


ลองทดสอบแล้วว่าเกี่ยวกับการ UNION หรือไม่ปรากฏว่าใช่ค่ะ
ถ้าลองค้นหาแบบตารางเดียว สามารถค้นหาได้ค่ะ

จะต้องทำยังไงคะ เกี่ยวกับการjoin ตารางทั้ง2นี้

code จริงค่ะ
หน้า show

<script type="text/javascript" language="javascript" >
			$(document).ready(function() {
				var dataTable = $('#employee-grid').DataTable( {
					"processing": true,
					"serverSide": true,
					"Paginate": true, 
					"LengthChange": false,
					"Filter": false,
					"Info": false,
					"order": [[ 2, "desc" ]],	//เรียง
                    "ajax":{
						url :"preCC-grid-data.php", // json datasource
						type: "post",  // method  , by default get
						error: function(){  // error handling
							$(".employee-grid-error").html("");
							$("#employee-grid").append('<tbody class="employee-grid-error"><tr><th colspan="3">No data found in the server</th></tr></tbody>');
							$("#employee-grid_processing").css("display","none");
							
						}
					},
					"fnDrawCallback": function () {
					  //alert('test');
						$(".example1").fancybox({
						'maxWidth'	: 800,
						'maxHeight'	: 600,
						'fitToView'	: false,
						'width'		: '100%',
						'height'		: '100%',
						'autoSize'	: false,
						'closeClick'	: false,
						'openEffect'	: 'none',
						'closeEffect'	: 'none',
						'type'			: 'iframe'
								});
								
					}
				} );
			} );
		</script>

 <div id="dt_example">
  
		  <div id="demo">
 <table id="employee-grid"  cellpadding="0" cellspacing="0" border="0" class="display" width="100%">
					<thead>
						<tr>
			<th width="10%">ตอบรับ PO</th>
        <th width="10%">วันที่ทำใบเสนอราคา</th>
			<th width="20%">เลขที่ใบเสนอราคา</th>
			
         <th width="30%">บริษัทลูกค้า</th>
          <th width="15%">Contact By</th>
			<th width="15%">แก้ไข </th>
						</tr>
					</thead>
			</table>
<!-------------------------------------------------------------------------------------->			

		  </div>

หน้า preCC-grid-data.php

<?php if (!isset($_SESSION)) {
  @session_start();
}


 ?>
<?php include('../Connections/conndb.php'); 
	
	$strSQL = "SELECT * FROM employee WHERE Eusername = '".$_SESSION['Eusername']."' AND Edepart = '".$_SESSION['Edepart']."' ";
	$objQuery = mysql_query($strSQL);
	$objResult = mysql_fetch_array($objQuery);
	$employee = $objResult['Eid'];

/* Database connection start */

$servername = "localhost";
$username = "root";
$password = "4321";
$dbname = "salecentral";

$conn = mysqli_connect($servername, $username, $password, $dbname) or die("Connection failed: " . mysqli_connect_error());
mysqli_set_charset($conn,"utf8");
/* Database connection end */


// storing  request (ie, get/post) global array to a variable  
$requestData= $_REQUEST;


$columns = array( 
// datatable column index  => database column name
	0 =>'checkPO',
	1 =>'Sadate',
	2 =>'Sacode',
	3 =>'name_partner', 
	4 => 'contactby'
);

// getting total number records without any search
$sql = "SELECT checkPO,Sadate, Sacode, name_partner, contactby, nickname";
$sql.=" FROM sale,employee,partner,contact where sale.id_contact=contact.id_contact AND sale.Eid=employee.Eid AND sale.id_partner=partner.id_partner";
$sql.=" UNION ALL SELECT checkPO,Sadate, Sacode, name_partner, contactby, nickname";
$sql.=" FROM cc_edit_sale,employee,partner,contact where cc_edit_sale.id_contact=contact.id_contact AND cc_edit_sale.Eid=employee.Eid AND cc_edit_sale.id_partner=partner.id_partner";
$query=mysqli_query($conn, $sql) or die("preCC-grid-data.php: get error");
$totalData = mysqli_num_rows($query);
$totalFiltered = $totalData;  // when there is no search parameter then total number rows = total number filtered rows.



$sql = "SELECT checkPO,Sadate, Sacode, name_partner, contactby, nickname";
$sql.=" FROM sale,employee,partner,contact where sale.id_contact=contact.id_contact AND sale.Eid=employee.Eid AND sale.id_partner=partner.id_partner";
$sql.=" UNION ALL SELECT checkPO,Sadate, Sacode, name_partner, contactby, nickname";
$sql.=" FROM cc_edit_sale,employee,partner,contact where cc_edit_sale.id_contact=contact.id_contact AND cc_edit_sale.Eid=employee.Eid AND cc_edit_sale.id_partner=partner.id_partner AND 1=1";
if( !empty($requestData['search']['value']) ) {   // if there is a search parameter, $requestData['search']['value'] contains search parameter
	$sql.=" AND ( checkPO LIKE '%".$requestData['search']['value']."%' ";    
	$sql.=" OR Sadate LIKE '%".$requestData['search']['value']."%' ";
	$sql.=" OR Sacode LIKE '%".$requestData['search']['value']."%' ";
	$sql.=" OR name_partner LIKE '%".$requestData['search']['value']."%' ";
	$sql.=" OR contactby LIKE '%".$requestData['search']['value']."%' )";
	
}


$query=mysqli_query($conn, $sql) or die("preCC-grid-data.php: get error");
$totalFiltered = mysqli_num_rows($query); // when there is a search parameter then we have to modify total number filtered rows as per search result. 
$sql.=" ORDER BY ". $columns[$requestData['order'][0]['column']]."   ".$requestData['order'][0]['dir']."  LIMIT ".$requestData['start']." ,".$requestData['length']."   ";
/* $requestData['order'][0]['column'] contains colmun index, $requestData['order'][0]['dir'] contains order such as asc/desc  */	
$query=mysqli_query($conn, $sql) or die("preCC-grid-data.php: get error");

$data = array();
while( $row=mysqli_fetch_array($query) ) {  // preparing an array
	//$idPO= $row["idPO"];
	$nestedData=array();
	if ($_SESSION['Eusername']== "cw03" || ($_SESSION['Eusername']== "cc62") || ($_SESSION['Eusername']== "cc44") ||$_SESSION['Edepart']== "reader")
		{
				if( strpos( $row["Sacode"], "Rev" )) {
							if ($row['checkPO']=='1') { 
								$nestedData[] = "<a href='checkPO_CC_edit.php?idx=$row[Sacode]'><img src='../images/icon_correct.gif'/></a>";
								}
							else {
								$nestedData[] = "<a href='checkPO_CC_edit.php?idx=$row[Sacode]'><img src='../images/icon_wrong.gif'/></a>";
								}
					}
				else { 
							if ($row['checkPO']=='1') { 
								$nestedData[] = "<a href='checkPO_CC.php?idx=$row[Sacode]'><img src='../images/icon_correct.gif'/></a>";
								}
							else {
								$nestedData[] = "<a href='checkPO_CC.php?idx=$row[Sacode]'><img src='../images/icon_wrong.gif'/></a>";
								}
				
				}
		}
		else { 
		if ($row['checkPO']=='1'){ $nestedData[] = "<img src='../images/icon_correct.gif'/>";} else { $nestedData[] = "<img src='../images/icon_wrong.gif'/>";}
	 }
	/*if($row['checkPO']=='1') { $nestedData[] = "<a href='checkPO_CC_edit.php?idx=$row[Sacode]'><img src='../images/icon_correct.gif'/></a>";}  
	if($row['checkPO']=='0') { $nestedData[] = "<img src='../images/icon_wrong.gif'/>";} */
	
	
	list($Year,$month,$day) = explode("-",$row['Sadate']);
    $nestedData[] = (int)$day."/".(int)$month."/".($Year);
	
	$nestedData[] = $row["Sacode"];
	$nestedData[] = $row["name_partner"];
	$nestedData[] = $row["contactby"]."(".$row["nickname"].")";
	$nestedData[] = "<a href='editQuotationCC-before.php?idx=$row[Sacode]' target='_self'><img src='../images/edit.png' width='30' title='แก้ไข' border='0' ></a><a class='example1' href='viewCC.php?idx=$row[Sacode]'><img src='../images/search.png' width='30' title='ดูใบเสนอราคา' border='0' ></a><a href='printCC.php?idx=$row[Sacode]'><img src='../images/print.png' width='30' title='พิมพ์ใบเสนอราคา' border='0' onClick='return Conf(this)' ></a>";
	$data[] = $nestedData;
}



$json_data = array(
			"draw"            => intval( $requestData['draw'] ),   // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw. 
			"recordsTotal"    => intval( $totalData ),  // total number of records
			"recordsFiltered" => intval( $totalFiltered ), // total number of records after searching, if there is no searching then totalFiltered = totalData
			"data"            => $data   // total data array
			);

echo json_encode($json_data);  // send data as json format

?>



Bsaranya 10-09-2016 10:39:59

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1
คิดว่าตารางทั้งสอง ต้องมี key ร่วมกัน หรือมีฟิลด์ที่สัมพันธ์กัน แล้วจากนั้นใช้ Left join เพิ่มดึงข้อมูลทั้งสองตาราง
มาแสดง ทั้งนี้ขึ้นกับโครงสร้างของตาราง ดังนั้นลองดูเนื้อหานี้เป็นแนวทาง

การใช้งาน SQL LEFT JOIN 


ninenik 10-09-2016
 ความคิดเห็นที่ 2


Frame Kittanat 09-03-2017 10:51






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ