วิธีการสลับข้อมูล MySQL ในคอลัมน์เดียวกัน


       สวัสดีครับ  วันนี้ผมจะมาพูดถึงวิธีการสลับข้อมูล MySQL ในคอลัมน์เดียวกัน  หรือพูดอีกอย่างนึกว่า "วิธีการสลับข้อมูล MySQL ในแถวที่ต่างกัน"  ก็ได้ครับ  พอพูดมาถึงตรงนี้ปั๊บ  บางคนอาจจะงงว่าแถวกับคอลัมน์  คืออะไร  และต่างกันยังไงอีกครับ  อะเดี๋ยวไปดูเรื่องแถวกับคอลัมน์กันก่อน

แถว และ คอลัมน์ ในโปรแกรม Microsoft Excel
ภาพจาก : http://www.korkru.com/media/excel/images/material1/material1_clip_image001.png

       และนี้คือแถว (Row) และคอลัมน์ (Column)ในโปรแกรม Excel นะครับ  ซึ่งก็จะเห็นได้ว่าแถวจะเป็นการแสดงข้อมูลแนวนอน  และคอลัมน์จะเป็นการแสดงข้อมูลในแนวตั้งครับ  ง่ายๆแค่นี้เอง

       ที่นี่เข้าเรื่องกันดีกว่าครับ  สิ่งที่ผมจะพูดถึงในบทความนี้ก็คือ  ผมต้องการจะสลับข้อมูล "EE" และ "10" จากแถวที่ 1  กับข้อมูล "FF" และ "30" จากแถวที่ 3 ผมว่าทุกคนคงเข้าใจเนอะ  หรือบางภาษาชาวบ้านเรียกว่าแลกข้อมูลก็ได้  เด่วมีภาพให้ดูครับ


       ตามรูปนะครับทุกคนคงเห็นกันอย่างชัดเจนแล้ว  ต่อไปเด่วผมจะมาอธิบายโค้ด Php ที่ใช้การ Query หรือประมวลผลจัดการข้อมูลตรงนี้นะครับ

$con = mysqli_connect("localhost","root","","test");

        ก่อนจะเขียนโค้ดจริงๆ จังๆ วิธีการสลับข้อมูล MySQL เราก็ต้องมาเริ่มประกาศคำสั่ง mysqli_connect กันก่อนครับ  โดยคำสั่งนี้เป็นคำสั่งในการเชื่อมต่อกับเว็บเซอวิส (WebService) ของเรานะครับ  ซึ่งถ้าใช้ฐานข้อมูลในเครื่องก็จะเป็น Localhost ตามด้วย Username , Password , Host Name ตามลำดับนะครับ  แต่ก็ขึ้นอยู่กับคำสั่งด้วย  บางคำสั่งก็อาจจะไม่ได้ประกาศแบบนี้

mysqli_set_charset($con,"utf8");

        จากนั้นบรรทัดต่อไปทำการประกาศ mysqli_set_charset ตามภาพนะครับ  และทำการกำหนดค่าเป็น $con กับ "utf8" ตามภาพเพื่อเลือก Query ที่ $con ตามคำสั่ง  mysqli_connect ข้างบน ส่วน utf8 เพื่อทำการเข้ารหัสให้ออกมาเป็นภาษาไทย

 if (mysqli_connect_errno($con))
        {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }

       ต่อมาผมใช้คำสั่งดักจับ if (mysqli_connect_errno($con)) บอกว่าถ้า MySQL นั้น Error จากตัวแปร $con นั้นคุณจะให้มันทำอะไรต่อ  ซึ่งผมนั้นก็ใช้คำสั่ง echo "Failed to connect to MySQL: " เพื่อแสดงข้อความ "Failed to connect to MySQL:" ออกมาครับ แล้วในเมื่อเชื่อมต่อไม่ได้มันก็มาจบที่คำสั่ง mysqli_close($con); แล้วก็จบกระบวนการไปเอง

แล้วนี่คือโค้ด (Code) จากบนทั้งหมด

  $con=mysqli_connect("localhost","root","","test"); 
       mysqli_set_charset($con,"utf8"); 
       if (mysqli_connect_errno($con)) 
          { 
       echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
           }

      ต่อมาจะเข้ามาถึงกระบวนการทำงานของโค้ดจริงๆ แล้วนะครับ  โดยที่ก่อนอื่นต้องกำหนดตัวแปรออกมาก่อน  โดยที่ผมกำหนดตัวแปรออกมา 2 ตัว  เสมือนกับว่าผมรับค่าจากโปรแกรมมา 2 ค่าด้วยกัน  ได้แก่ $h1 = "1"; และ $h2 = "4"; ก็คือ rule_id ที่ 1 กับ rule_id ที่ 4 นั้นเอง  เพราะว่าเรานั้นต้องการจะแลกข้อมูลใน rule_id ของ 2 ค่านี้นั้นเองครับ

  $h1 = "1"; 
 $h2 = "4";

หรือบางคนที่รับค่า Post มาก็ให้ประกาศแบบนี้นะครับ $h1 = $_POST["ตัวแปรที่คุณตั้ง"]; และ $h2

 $h1 = $_POST["ตัวแปรที่คุณตั้ง"];
 $h2 = $_POST["ตัวแปรที่คุณตั้ง"];

จากนั้นเราก็จะใช้โค้ด (Code) ในการสลับข้อมูลนั้นก็คือ 

$a1 = "UPDATE rules a INNER JOIN rules b 
ON a.rule_id <> b.rule_id 
SET a.rule_name = b.rule_name, a.priority = b.priority 
WHERE a.rule_id IN (1,4) AND b.rule_id IN (1,4)";

       จากโค้ดด้านบนเรากำหนดตัวแปร  $a1 ขึ้นเพื่อเตรียมทำการ Query ไว้  โดยข้างในจะใช้คำสั่ง  Update  และ Inner Join ในการเชื่อม  กำหนด rules a และ rules b ไว้เพื่อแทนตำแหน่งที่ 1 และ 4 

       ต่อไปถ้าเราต้องให้สลับกับอันไหนก็กำหนดไปเลยครับ อย่างตัวอย่างต้องการสลับที่ rule_name ก็ใส่หลัง SET เป็น  a.rule_name = b.rule_name ตามด้วย a.priority = b.priority ตามลำดับ  เพราะว่าเราต้องการแลกทั้ง rule_name และ priority

ต่อไปก็สั่งให้ทำการประมวลผลโดยใช้ mysqli_query($con,$a1); แค่นี้จบ ง่ายป่ะล่ะ

mysqli_query($con,$a1);

และนี้คือโค้ด (Code) ทั้งหมด  ตอนจบอย่าลืมปิดด้วย mysqli_close($con); นะ

<?php
       $con=mysqli_connect("localhost","root","","test");
       mysqli_set_charset($con,"utf8");
       if (mysqli_connect_errno($con))
          {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
          }

    $h1 = "1";
    $h2 = "4";

$a1 = "UPDATE rules a INNER JOIN rules b ON a.rule_id <> b.rule_id SET a.rule_name = b.rule_name, a.priority = b.priority WHERE a.rule_id IN (1,4) AND b.rule_id IN (1,4)";

    mysqli_query($con,$a1);
    mysqli_close($con);

?>

       เสร็จแล้วพอเรากดที่ไฟล์นี้ปั๊บ  ข้อมูลก็จะทำการสลับที่กันเรียบร้อยครับ  ตามภาพด้านล่างเลย (โค้ดของคุณไม่ผิดพลาดนะ)


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

จาก : https://stackoverflow.com/questions/17433666/mysql-swap-data-for-different-rows

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การรับค่า ส่งค่าจากหน้าที่ 1 ไปหน้าที่ 2 บน Flutter (How to pass data between screens in Flutter?)

การจับเวลาบน Flutter ทำยังไง (How to count up timer flutter?)