ข้ามไปที่เนื้อหาหลัก

บทความ

กำลังแสดงโพสต์จาก มกราคม, 2014

ปั่นปวน กวนๆ ทำไมนับยอดแล้วไม่ตรงกันนะ SQL COUNT()

SELECT count(*) AS total FROM my_table WHERE id = xxxx หลังจากที่ตั้งหน้าตั้งตามทำรายงานเอกสารตีกลับอยู่หลายวัน และทดสอบจนแน่ใจว่าทำงานได้ถูกต้อง บันทึกได้ ค้นหาได้ แก้ไขได้ ในที่สุดก็ได้เวลานำไปให้ยูสเซอร์เขาใช้กันจริงๆ ซะที และแล้วสิ่งที่ไม่คาดฝันก็บังเกิดขึ้น นับจำนวนครั้งแล้วเกิน ทั้งที่เป็นครั้งแรกแต่ดันพิมพ์รายงานออกมาเป็นการตีกลับครั้งที่ 2 เลยนั่งค้นหาสาเหตุอยู่นาน ไม่ว่าจะพิมพ์ยังไงก็เกิน แต่พอนำโค๊โเอาไปคิวรี่ใน phpMyAdmin แล้วไม่เกินแฮะ แปลกมากๆ โค๊ดก็ทำงานได้ปกติไม่มีข้อผิดพลาดแต่อย่างใด แล้วเหตุไฉนถึงพิมพ์ข้อมูลออกมาไม่ตรง ในที่สุดก็พบคำตอบที่ข้องใจว่าทำไมถึงนับเกินตลอด และทุกครั้งที่สั่งพิมพ์จะเกินไป 1 เสมอ ก็เพราะดันนับหลังจาก insert ไปแล้ว ก็แน่ล่ะสิ มันต้องเกินอยู่แล้ว การนับลำดับมันควรจะนับก่อน insert ไม่ใช่เหรอ 1) นับจำนวนครั้ง ได้ 0 2) นำค่าที่ได้ +1 เพื่อหาลำดับปัจจุบันจะได้ 1 3) พิมพ์ออกมาจะได้ครั้งที่ 1 แต่ดันสลับขั้นตอนที่ 1 กับ 2 1) insert ข้อมูลลงไป 2) นับจำนวนครั้งได้ 1 นับไปบวก +1 จะได้ 2 3) เมื่อสั่งพิมพ์ทั้งที่เป็นครั้ง...

Crystal Report กับเงื่อนไขฟิลด์วันที่ใช้งานกับ MySQL

นั่งจมปรักอยู่กับความมืดมนอยู่นาน 2 ชั่วโมง ในที่สุดก็ค้นพบหนทางสว่าง PHP SQL tb_follow.follow_time BETWEEN '$date1' AND '$date2' VB6 CrystalReport SelectionFormula {tb_follow.follow_time} In Date(" & xDate1Y & ", " & xDate1M & ", " & xDate1D & ") To Date(" & xDate2Y & "," & xDate2M & "," & xDate2D & ") " ใครที่กำลังมองหาวิธีการส่ง SelectionFormula ที่เป็นเงื่อนไขวันที่ไปยัง CrystalReport อยู่ละก้อลองนำไปใช้ดูละกัน 

แบ็กอัพ MySQL ด้วยการสร้าง Batch File เรียก mysqldump ตามเวลาที่ตั้งไว้

ทดสอบแล้วใช้ได้ แต่ใช้จริงต้องปรับตำแหน่งเรียก mysqldump ที่ต่างกัน เช่นถ้าใช้ wamp เป็นตัวติดตั้งก็จะอยู่ที่ C:\wamp\bin\mysql\mysql5.5.24\bin\mysqldump ถ้าติดตั้ง MySQL เพียวๆ ก็คงต้องหาตำแหน่งที่ถูกต้องของเซิร์ฟเวอร์แต่ละเวอร์ชั่น การจะกำหนดเวลาแบ็กอัพนั้น ให้สร้างเป็นไฟล์ *.bat เพื่อเรียกใช้ในการสร้าง Schedule ของ Windows Server  (หากใช้ลีนุกซ์ก็คงจะใช้ cron job จะสะดวกกว่าด้วย webmin) @echo off echo Running dump... set MYDATABASE=xxxxxxx set MYSQLUSER=root set MYSQLPASS=xxxxxxx set BACKUPFILE="F:\Backup\MySQL\%MYDATABASE%_%date:~10,4%-%date:~4,2%-%date:~7,2%_TIME.%time:~0,2%.%time:~3,2%.sql" C:\wamp\bin\mysql\mysql5.5.24\bin\mysqldump -u%MYSQLUSER% -p%MYSQLPASS% --result-file=%BACKUPFILE% %MYDATABASE% echo Done! %BACKUPFILE% ทดสอบฐานข้อมูล 1GB ใช้เวลาประมาณ 1 นาที ส่วนผลข้างเคียงยังไม่ทราบ เพราะเป็นการ mysqldump ไม่น่าจะมีปัญหา แต่ที่แน่ๆ เขาบอกว่าดีกว่า Batch file ตัวเดิมที่ผมใช้อยู่ (แบบเดิมคัดลอกไดเรกทอรี่ฐานข้อมูลทั้งดุ้น) อยากรู้ว่า MySQL ...

Crystal Report ขีดเส้นแบ่งคอลัมน์อย่างไร ไม่ให้เลยไปจนถึงด้านล่างของหน้ากระดาษ

สำหรับครั้งต่อไปใน Crystal Report หาจะต้องแบ่งคอลัมน์โดยการขีดเส้นแนวตั้ง จะต้องทำทีละส่วน ถ้าขีดยาวรวดเดียวตั้งแต่ Head ผ่าน Detail จนไปถึง Footer แล้วล่ะก็ รายการที่มีต่อเนื่องหลายหน้าจะมีเส้นแนวตั้งเลยในบรรทัดสุดท้าย แต่ในกรณีที่ต้องค่าให้ detail มีหลายบรรทัด บางครั้งก็ยังคงมีเส้นเลยอยู่ แต่ก็ยังพอดูได้

ดึงข้อมูลจากหน้าเว็บอื่น มาแสดงที่หน้าเว็บของเรา ด้วย file_get_contents

เข้าเว็บที่ไม่ได้ encode ทีไรก็จะต้องคอยเปลี่ยนภาษาทุกครั้ง สุดท้ายเลยตัดสินใจ ดึงข้อมูลมา convert ภาษาที่ต้องการเองซะเลย ดึงข้อมูลจากหน้าเว็บอื่นมาแสดงด้วย 4 ฟังก์ชั่น 1.) file_get_contents() 2.) iconv() 3.) preg_match_all() 4.) foreach() <?php $url = 'http://www.myweb.com/target_page.php'; $content = file_get_contents($url); $content = iconv('tis-620', 'utf-8', $content ); preg_match_all ("/<strong>(.*?)<\/strong>/is", $content, $matches); foreach($matches[1] as $link){ //Coding here.. } ?> PHP  CI  MANIA   -  PHP Code Generator  โปรแกรมช่วยสร้างโค้ด  "ลดเวลาการเขียนโปรแกรม" ราคาสุดคุ้ม    http://fastcoding.phpcodemania.com

PHP CI MANIA