คลังเก็บบล็อก

หาและลบข้อมูลซ้ำในตาราง


การย้ายระบบจากระบบเก่ามาระบบใหม่ เป็นธรรมดาที่จะเจอปัญหาความผิดพลาดจากการที่ระบบเดิมออกแบบมาไม่ดี ทำให้มีข้อมูลซ้ำซ้อน เช่น ระบบรับสมัครสมาชิกไม่ได้กรองข้อมูลว่า ผู้ที่ลงทะเบียนสมัครไว้แล้วหรือยัง แต่ในระบบใหม่มีความจำเป็นที่จะต้องควบคุมให้ หนึ่งคน มีได้หนึ่งยูเซอร์เท่านั้น เราสามารถกรองออกได้โดยข้อมูล อีเมล์ หมายเลขบัตรประชาชน อาจจะเป็นต้องใช้ ชื่อและนามสกุลด้วย โดยใช้ query ง่ายๆ

SELECT email, count (*) AS duplicate
FROM `users`
GROUP BY email
HAVING duplicate > 1;

ก็จะได้อีเมล์ที่ซ้ำกันออกมาออกมา แต่เจอผู้ที่สมัครหลายยูเซอร์จำนวนมาก จะมาลบที่ละคนก็ไม่ไหว อาศัยกฎของทางเว็บที่ห้ามสมัครเกินกว่าหนึ่งยูเซอร์ มาเป็นเหตุผลในการลบรายการที่ซ้ำออกไป อัตโนมัติ
โดยเราไม่จำเป็นต้องเขียนคำสั่งใน PHP มาวนลบข้อมูล เพราะสามารถใช้วิธีสร้างตารางชั่วคราวมาเก็บข้อมูลที่ไม่ซ้ำ

INSERT INTO `users_temp` 
SELECT *, count (*) AS duplicate
FROM `users`
GROUP BY email
HAVING duplicate > 1;

อธิบายง่ายๆ คือเลือกข้อมูลโดยกรุ๊บข้อมูลที่ซ้ำไปแทรกในตารางใหม่ ครั้งต่อไปก็ดัดแปลงเป็นเลขบัตรประชาชน ชื่อและนามสกุล พอสมควรแล้วก็ลบตารางเดิม เปลี่ยนชื่อตารางใหม่ไปแทนของเดิม

db2:odbc


code เดิมติดต่อ database ผ่าน odbc (ถ้าเขียนใหม่ แนะนำให้ใช้ pdo จะดีกว่าครับ มี .dll อยู่ใน folder ที่ download มา) ดังนั้นจำเป็นต้องลง เวอร์ชั่นให้ตรงกับ windows ถ้าเราใช้ windows 64 bit ก็ต้องใช้ ก็ต้องใช้ version 64 เท่านั้น bit version 32 bit ลงได้แต่จะไม่มี odbc driver ใน ODBC Data Source Administrator
ถ้า db2 อยู่คนละเครื่องอาจจะลง db2 connect เพื่อที่จะลง driver เพิ่ม จะเจอใน fix tool ครับ
เราจะสามารถกำหนด datasource ได้ 3 แบบครับ

  1. user dsn จะสามารถใช้ได้เฉพาะผู้สร้างเท่านั้น
  2. systems dsn ผู้อื่นสามารถเรียกใช้ได้
  3. file dsn คือการเก็บ config ไว้ในรูปแบบไฟล์

แต่เพราะเครื่องผมเป็น windows 64 bit จะพบกับ error

SQLSTATE Error Description
IM014 The specified DSN contains an architecture mismatch between the Driver and Application (DM) 32-bit application uses a DSN connecting to a 64-bit driver; or vice versa.

ตอนนี้ยังไม่มี php 64 bit สำหรับ windows อย่างเป็นทางการครับ สรุปคือตันครับ คงต้องหาวิธีอื่น

%d bloggers like this: