ช่วยหน่อยนะครับๆๆๆ PLEASE !!!! ช่วยด้วยครับ ใกล้จะเป็นจริงแล้ววววววว ติดอีกนิดเดียว ครับ !!!!
โค๊ดนี้เป็นโค๊ดที่ผม แก้มาหลาย อย่างที่ได้ตั้งกระทู้มาหลายกระทู้ กว่าจะได้แค่นี้เกือบตาย
แต่ติดที่ว่า join มันยากมาก เวลาผลลัพธ์ออกมาเช่น ผมต้องงการจะค้นหาข้อมูลการลงเวลา
ผมต้องกรอก รหัสบัตรประชาชน และเลือกวันที่ สองค่า แล้วคิวรี่ออกมา กลายเป็นว่า มันไปวนลูปอี่ท่าไม่รู้
ดังภาพเลยครับ
เลือกวันที่ 2012-07-10 ถึงวันที่ 2012-07-13 ปรากฏว่าออกมา 16 ค่า งงเลย
คือมันจะได้ต้องแสดงแค่ วันที่ 10,11,12,13 อย่างละวันอ่ะครับ
นี่โค๊ดของของผม
Code (PHP)
<?
include('connmsfinger.php');
$code ="select I.Name,I.CHECKTIME,I.DEPTNAME,I.CardNo ,CONVERT(CHAR(8), I.CHECKTIME, 114) AS TimeIN,CONVERT(CHAR(8), O.CHECKTIME, 114) AS TimeOUTS from (select Name,CHECKTIME,DEPTNAME,CardNo,CONVERT(CHAR(8), CHECKTIME, 114) AS TimeIN from View_Person_Bydate where CHECKTYPE='I' and CONVERT(CHAR(10), CHECKTIME, 23)between '$date1' and '$date2' and CardNo='".$_POST["citizen_id"]."' ) I left join (select CHECKTIME,CardNo,CONVERT(CHAR(8),CHECKTIME, 114) AS TimeOUTS from View_Person_Bydate where CHECKTYPE='O' and CONVERT(CHAR(10), CHECKTIME, 23)between '$date1' and '$date2' and CardNo='".$_POST["citizen_id"]."') O on I.CardNo=O.CardNo";
//$qqr=odbc_exec($connmsfiger,$code);
$objQuery = mssql_query($code) or die ("Error Query [".$code."]");
?>
<table width="883" border="0" cellpadding="1" cellspacing="0">
<tr style="BORDER-BOTTOM: #999999 1px solid; BORDER-LEFT: #999999 1px solid; BORDER-TOP: #999999 1px solid; BORDER-RIGHT: #999999 1px solid" border="0" cellspacing="0" cellpadding="5">
<td height="28" valign="top" bgcolor="#F7F7F7" style="BORDER-BOTTOM: #999999 1px solid; BORDER-LEFT: #999999 1px solid; BORDER-TOP: #999999 1px solid; BORDER-RIGHT: #999999 1px solid " border="0" cellspacing="0" cellpadding="1"><table width="922" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="131" bgcolor="#003300" class="style45"><div align="center" class="style18">วันที่</div></td>
<td width="243" bgcolor="#003300" class="style45"><div align="center" class="style18">ชื่อ-นามสกุล</div></td>
<td width="279" bgcolor="#003300" class="style45"><div align="center" class="style18">สังกัด</div></td>
<td width="147" bgcolor="#003300" class="style45"><div align="center" class="style18">เวลาเข้า</div></td>
<td width="122" bgcolor="#003300" class="style45"><div align="center" class="style18">เวลาออก</div></td>
</tr>
<?
while($objResult = mssql_fetch_array($objQuery))
{
$date = date('Y-m-d', strtotime($objResult["CHECKTIME"]));
$DateStamp=$date;
$NamePerson=$objResult["Name"];
$DeptName=$objResult["DEPTNAME"];
$TimeIn=$objResult["TimeIN"];
$TimeOut=$objResult["TimeOUTS"];
?>
<tr>
<td><div align="center" class="style20"> <?=$DateStamp?> </div></td>
<td><div align="center" class="style20"> <?=$NamePerson?></div></td>
<td><div align="center" class="style20"><?=$DeptName?></div></td>
<td><div align="center" class="style20"><?=$TimeIn ?></div></td>
<td><div align="center" class="style20"><?= $TimeOut?></div></td>
นี่ฐานข้อมูลผม
ช่วยหน่อยนะครับๆๆๆ PLEASE !!!!Tag : PHP, JavaScript
ประวัติการแก้ไข 2012-07-20 15:59:19 2012-07-22 10:53:40
Date :
2012-07-20 15:57:57
By :
compiak
View :
1214
Reply :
15
Code
select Name,CHECKTIME,DEPTNAME,CardNo ,case when CHECKTYPE='I' then CONVERT(CHAR(8),CHECKTIME, 114) else '' end AS TimeIN
,case when CHECKTYPE='O' then CONVERT(CHAR(8),CHECKTIME, 114) else '' end AS TimeOUTS
from View_Person_Bydate where (CHECKTYPE='I' or CHECKTYPE='O') and CONVERT(CHAR(10), CHECKTIME, 23) between '$date1' and '$date2'
and CardNo='".$_POST["citizen_id"]."'
ลองดู ครับ
Date :
2012-07-20 17:12:19
By :
thep
ขอบคุณครับ เดี๋ยวผมจะลองดูครับ
ว่าแต่คุเป็นสมาชิก ในเว็บนี้ป่าวครับ
Date :
2012-07-20 19:54:24
By :
compiak
ไม่ใช่ครับ
Date :
2012-07-21 08:59:37
By :
thep
มันไม่ error แล้วครับ
แต่มันขึ้นแบบนี้ครับ
อยากให้ เวลาเข้า - เวลาออก อยู่ แถวเดียวกันครับ
Code (PHP)
<?
<?
include('connmsfinger.php');
$code ="SELECT Name,CHECKTIME,DEPTNAME,CardNo ,CASE WHEN CHECKTYPE='I' THEN CONVERT(CHAR(8),CHECKTIME, 114) else '' end AS TimeIN
,CASE WHEN CHECKTYPE='O' THEN CONVERT(CHAR(8),CHECKTIME, 114) ELSE '' END AS TimeOUTS
from View_Person_Bydate where (CHECKTYPE='I' OR CHECKTYPE='O') and CONVERT(CHAR(10), CHECKTIME, 23) between '$date1' and '$date2' and CardNo='".$_POST["citizen_id"]."' ";
$objQuery = mssql_query($code) or die ("Error Query [".$code."]");
//$objResult = mssql_fetch_array($objQuery);
?>
<table width="883" border="0" cellpadding="1" cellspacing="0">
<tr style="BORDER-BOTTOM: #999999 1px solid; BORDER-LEFT: #999999 1px solid; BORDER-TOP: #999999 1px solid; BORDER-RIGHT: #999999 1px solid" border="0" cellspacing="0" cellpadding="5">
<td height="28" valign="top" bgcolor="#F7F7F7" style="BORDER-BOTTOM: #999999 1px solid; BORDER-LEFT: #999999 1px solid; BORDER-TOP: #999999 1px solid; BORDER-RIGHT: #999999 1px solid " border="0" cellspacing="0" cellpadding="1"><table width="922" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="131" bgcolor="#003300" class="style45"><div align="center" class="style18">วันที่</div></td>
<td width="243" bgcolor="#003300" class="style45"><div align="center" class="style18">ชื่อ-นามสกุล</div></td>
<td width="279" bgcolor="#003300" class="style45"><div align="center" class="style18">สังกัด</div></td>
<td width="147" bgcolor="#003300" class="style45"><div align="center" class="style18">เวลาเข้า</div></td>
<td width="122" bgcolor="#003300" class="style45"><div align="center" class="style18">เวลาออก</div></td>
</tr>
<?
$i=1;
while($objResult = mssql_fetch_array($objQuery))
{
$date = date('Y-m-d', strtotime($objResult["CHECKTIME"]));
$DateStamp=$date;
$NamePerson=$objResult["Name"];
$DeptName=$objResult["DEPTNAME"];
$TimeIn=$objResult["TimeIN"];
$TimeOut=$objResult["TimeOUTS"];
?>
<tr>
<td><div align="center" class="style20"> <?=$DateStamp?> </div></td>
<td><div align="center" class="style20"> <?=$NamePerson?></div></td>
<td><div align="center" class="style20"><?=$DeptName?></div></td>
<td><div align="center" class="style20"><? echo (empty($TimeIn)) ? " ไม่ลงเวลาเข้า " : "$TimeIn"; ?></div></td>
<td><div align="center" class="style20"><? echo (empty($TimeOut)) ? " ไม่ลงเวลาออก " : "$TimeOut"; ?></div></td>
</tr>
<? } ?>
ประวัติการแก้ไข 2012-07-22 10:51:07
Date :
2012-07-22 09:45:56
By :
compiak
up up up เดี๋ยวกระทู้ตก
ช่วยดูให้หน่อยครับ
Date :
2012-07-22 10:51:54
By :
compiak
สงสัยวันนี้วันอาทิตย์ เป็นวันพักผ่อน เค้าก็เลยไม่ค่อยเข้ามาในเว็บเท่าไหร่
เดี๋ยววันจันทร์ ตั้งใหม่ก็ได้ อาจจะรกไปนิด
Date :
2012-07-22 11:24:37
By :
compiak
up อัพ
อัพ
อัพ
ยังไม่มีใครมาช่วยเลย
Date :
2012-07-22 13:06:49
By :
compiak
ขอเสริมนะครับ เพราะฐานข้อมูลที่ผมมีไม่มีฐานข้อมูลที่คล้ายกับของคุณเปี๊ยกเลย
ดูจากฐานข้อมูลเวลาเข้าทำงาน-เวลาเลิกงาน อยู่คนละ Record ก็ถูกแล้วที่ค่าจะออกมาแบบตาราง
แต่ถ้าจะให้อยู่บรรทัดเดียวกันผมก็นึกได้แค่ว่าคงจะสร้างเงื่อนไขอะไรสักอย่าง เช่น
สร้างเงื่อนไขของ if วันที่ลูปมาแสดง ถ้าวันซ้ำกันก็ให้ออกข้อมูลมาแค่เวลาเลิกงาน
แต่ยังนึก Code ไม่ออกว่าจะเอาไปแทรกตรงไหน เด๋วขอไปสร้างฐานข้อมูลเลียนแบบแล้วลองคิดโค้ด if สักพัก....
ถ้าได้จะเอามาแนะนำ
ประวัติการแก้ไข 2012-07-22 13:48:36
Date :
2012-07-22 13:47:46
By :
apisitp
มาล่ะ
แสดงผล
<?
include "connect.php";
mysql_connect($host,$user,$pw) or die("ติดต่อ Host ไม่ได้");
mysql_select_db($dbname) or die("ติดต่อฐานข้อมูลไม่ได้");
mysql_query("SET character_set_results=tis620");
mysql_query("SET character_set_client='tis620'");
mysql_query("SET character_set_connection='tis620'");
mysql_query("collation_connection = tis620_thai_ci");
mysql_query("collation_database = tis620_thai_ci");
mysql_query("collation_server = tis620_thai_ci");
$sql = "select * from person" ;
$sqlquery=mysql_db_query($dbname, $sql);
$total = mysql_num_rows($sqlquery);
$Query = mysql_query($sql );
$totalp = mysql_num_rows($Query);
?><br><br><br><br>
<table width="883" border="0" cellpadding="1" cellspacing="0">
<tr style="BORDER-BOTTOM: #999999 1px solid; BORDER-LEFT: #999999 1px solid; BORDER-TOP: #999999 1px solid; BORDER-RIGHT: #999999 1px solid" border="0" cellspacing="0" cellpadding="5">
<td height="28" valign="top" bgcolor="#F7F7F7" style="BORDER-BOTTOM: #999999 1px solid; BORDER-LEFT: #999999 1px solid; BORDER-TOP: #999999 1px solid; BORDER-RIGHT: #999999 1px solid " border="0" cellspacing="0" cellpadding="1"><table width="922" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="131" bgcolor="#999999" class="style45"><div align="center" class="style18">วันที่</div></td>
<td width="243" bgcolor="#999999" class="style45"><div align="center" class="style18">ชื่อ-นามสกุล</div></td>
<td width="147" bgcolor="#999999" class="style45"><div align="center" class="style18">เวลาเข้า</div></td>
<td width="122" bgcolor="#999999" class="style45"><div align="center" class="style18">เวลาออก</div></td>
</tr>
<?
$i=1;
while($objResult = mysql_fetch_array($Query))
{
$DateStamp=$objResult["dddd"];
$NamePerson=$objResult["name"];
$TimeIn=$objResult["tttt"];
?>
<tr>
<? if($DateStamp==$d1){?>
<td><div align="center" class="style20"> <?=$DateStamp?> </div></td>
<td><div align="center" class="style20"> <?=$NamePerson?></div></td>
<td><div align="center" class="style20"><?=$t1?></div></td>
<td><div align="center" class="style20"><?=$TimeIn?></div></td>
<?
}else{} ?>
</tr>
<?
$d1=$DateStamp;
$t1=$TimeIn;
}
?>
อันนี้ฐานข้อมูล
Code (PHP)
-- phpMyAdmin SQL Dump
-- version 2.10.3
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jul 22, 2012 at 03:14 PM
-- Server version: 5.0.51
-- PHP Version: 5.2.6
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `db_badminton`
--
-- --------------------------------------------------------
--
-- Table structure for table `person`
--
CREATE TABLE `person` (
`id` int(4) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`dddd` date NOT NULL,
`tttt` time NOT NULL,
`card` varchar(13) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=tis620 AUTO_INCREMENT=3 ;
--
-- Dumping data for table `person`
--
INSERT INTO `person` VALUES (1, 'กล้า', '2012-07-15', '08:00:00', '5000000000007');
INSERT INTO `person` VALUES (2, 'กล้า', '2012-07-15', '17:00:00', '5000000000007');
INSERT INTO `person` VALUES (3, 'กล้า', '2012-07-16', '08:00:00', '5000000000007');
INSERT INTO `person` VALUES (4, 'กล้า', '2012-07-16', '17:00:00', '5000000000007');
อันนี้ผลที่ได้ ขอมูลในตารางมี 4 record แสเงข้อมูลเพียง 2 บรรทัดโดยมีเงื่อนไขของวันเป็นที่ตั้ง
ผมลองทำฐานข้อมูลง่าย ๆ ไม่รู้ว่าของคุณเปี๊ยก join กันกี่ตารางต้องขอโทษด้วย...
ส่วนตรงโค้ด สงสัยตรงไหนก็ถามล่ะกัน ^^
Date :
2012-07-22 14:27:15
By :
apisitp
ขอบคุณครับ เดี๋ยวผมจะลองดูนะครับ ;'))
Date :
2012-07-22 14:43:44
By :
compiak
ในตารางผม ไม่ได้ join กันเลยครับ
เพราะผมสร้าง views ใน mysql เลยครับ
เดี๋ยวถ้าได้ยังไงผมจะโพสให้ดูนะครับ
Date :
2012-07-22 14:47:25
By :
compiak
ออกแล้วครับ
ในตัวอย่างผมเลือกวันที่ 2012-07-18 ถึงวันที่ 2012-07-22 มันขึ้นแค่ 18,19,20 เองครับที่จริงแล้ววันที่ 22 ผมมีเวลาเข้านะครับ
แต่มันไม่ขึ้น จะทำไงให้มันขึ้นดี
แต่ติดอีกนิดเดียวครับ
คือถ้า วันไหน ไม่มีเวลาเข้า หรือว่า เวลาออก
วันนั้น มันจะไม่มีข้อมูลขึ้นเลยอ่ะครับ
ผมอยากให้ แบบว่ามันแสดงทุกวันที่เราเลือก ถ้ามีวันไหนมีเวลาเข้า แต่ไม่มีเวลาออก ก็ให้ขึ้นเวลาเข้าด้วย
ถ้าวันไหนไม่มีเวลาเข้าแต่มีเวลาออก ก็อยากให้ขึ้นเวลาออก อ่ะครับ
ไม่รู้ว่าจะได้ป่าว ข้อมูลผมไม่มี join ครับ มีตารางเดียว เพียงแต่จะมี สถานะเป็น เช็ค I คือเวลาเข้า และ O คือเวลาออกครับ
Code (PHP)
<?
include('connmsfinger.php');
$code ="SELECT Name,CHECKTIME,DEPTNAME,CardNo,CONVERT(CHAR(8),CHECKTIME, 114) AS TimeIN,CONVERT(CHAR(8), CHECKTIME, 114) AS TimeOUTS
from View_Person_Bydate where CONVERT(CHAR(10), CHECKTIME, 23) between '$date1' and '$date2' and CardNo='".$_POST["citizen_id"]."' ";
$objQuery = mssql_query($code) or die ("Error Query [".$code."]");
$totalp = mssql_num_rows($objQuery);
//$objResult = mssql_fetch_array($objQuery);
?>
<table width="883" border="0" cellpadding="1" cellspacing="0">
<tr style="BORDER-BOTTOM: #999999 1px solid; BORDER-LEFT: #999999 1px solid; BORDER-TOP: #999999 1px solid; BORDER-RIGHT: #999999 1px solid" border="0" cellspacing="0" cellpadding="5">
<td height="28" valign="top" bgcolor="#F7F7F7" style="BORDER-BOTTOM: #999999 1px solid; BORDER-LEFT: #999999 1px solid; BORDER-TOP: #999999 1px solid; BORDER-RIGHT: #999999 1px solid " border="0" cellspacing="0" cellpadding="1"><table width="922" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="131" bgcolor="#003300" class="style45"><div align="center" class="style18">วันที่</div></td>
<td width="243" bgcolor="#003300" class="style45"><div align="center" class="style18">ชื่อ-นามสกุล</div></td>
<td width="279" bgcolor="#003300" class="style45"><div align="center" class="style18">สังกัด</div></td>
<td width="147" bgcolor="#003300" class="style45"><div align="center" class="style18">เวลาเข้า</div></td>
<td width="122" bgcolor="#003300" class="style45"><div align="center" class="style18">เวลาออก</div></td>
</tr>
<?
$i=1;
while($objResult = mssql_fetch_array($objQuery))
{
$date = date('Y-m-d', strtotime($objResult["CHECKTIME"]));
$DateStamp=$date;
$NamePerson=$objResult["Name"];
$DeptName=$objResult["DEPTNAME"];
$TimeIn=$objResult["TimeIN"];
$TimeOut=$objResult["TimeOUTS"];
?>
<tr>
<? if($DateStamp==$d1){?>
<td><div align="center" class="style20"> <?=$DateStamp?> </div></td>
<td><div align="center" class="style20"> <?=$NamePerson?></div></td>
<td><div align="center" class="style20"><?=$DeptName?></div></td>
<td><div align="center" class="style20"><?=$t1?></div></td>
<td><div align="center" class="style20"><?=$TimeOut?></div></td>
</tr>
<?
}else{}
?>
<?
$d1=$DateStamp;
$t1=$TimeIn;
}
?>
ประวัติการแก้ไข 2012-07-22 15:17:15
Date :
2012-07-22 15:16:39
By :
compiak
- ตรงไม่ลงเวลาทำงานเข้า ออก คุณเปี้๊ยกก็เอา echo (empty($TimeIn)) ? " ไม่ลงเวลาเข้า " : "$TimeIn"; มาใช้เหมือนเดิมได้นะ ลองเปลี่ยนตัวแปรดู ผมว่าน่าจะได้
- ส่วนเรื่องค้นหาโดยใช้ระยะห่างของวันเป็นตัวตั้ง ผมยังไม่เคยทำจริง ๆ ว่าง่าย ๆ ค้นหาเงื่อนไขเยอะ ๆ ยังไม่เคยทำ เพราะ ที่ผมแนะนำไปจะเหมาะกับการค้นหาแบบเจาะจงตรงตัว หรือการแสดงค่าทั้งหมด ตรงนี้ต้องรอท่านต่อไปล่ะ แต่ไงเด๋วช่วยคิดต่อด้วย มึนล่ะ ขอไปพักดูถ่ายทอด DotA ก่อน
- เห็นคุณเปี๊ยกทำเว็บแบบนี้ เด๋วต้องหัดทำการค้นหาแบบที่เงื่อนไขเยอะ ๆ ดูบ้างล่ะ สนุกดี....
... พยายามเข้านะ
ประวัติการแก้ไข 2012-07-22 15:35:06
Date :
2012-07-22 15:28:21
By :
apisitp
ครับผม ยังไงก็ขอบคุณครับ
Date :
2012-07-22 15:32:02
By :
compiak
Load balance : Server 02