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

บทความ

กำลังแสดงโพสต์จาก มกราคม, 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