ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingสอบถามผู้รู้เกี่ยวกับคำสั่ง MySQL ครับ
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: สอบถามผู้รู้เกี่ยวกับคำสั่ง MySQL ครับ  (อ่าน 1328 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
tksumeth
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 13



ดูรายละเอียด
« เมื่อ: 01 สิงหาคม 2010, 15:07:24 »

 wanwan003
พอดีอยากจะทราบว่าพอจะมีคำสั่งแบบนี้รึเปล่าครับ

สมมติว่าผมมีข้อมูลอยู่ 2 แถว ซึ่งดึงข้อมูลมาจากตาราง A
โดยข้อมูลมีดังนี้
แถวที่ 1
1 ----------------- มานะ ----------------- ABCD ----------------- EFGH
แถวที่ 2
2 ----------------- มานี  ----------------- IJKL ----------------- MLOP

ผมจะสลับให้ มานี ไปอยู่ที่ มานะ และให้ มานะ มาอยู่ที่ มานี
หน้าตาจะออกมาแบบนี้
แถวที่ 1
1 ----------------- มานี  ----------------- ABCD ----------------- EFGH
แถวที่ 2
2 ----------------- มานะ ----------------- IJKL ----------------- MLOP

พอจะมีรู้คำสั่งแบบเจาะจงกับรูปแบบนี้รึเปล่าครับ
 wanwan017 ขอความกรุณาด้วยนะครับ
« แก้ไขครั้งสุดท้าย: 01 สิงหาคม 2010, 15:09:57 โดย tksumeth » บันทึกการเข้า
Extra Cash
สมุนแก๊งเสียว
*

พลังน้ำใจ: 268
ออฟไลน์ ออฟไลน์

กระทู้: 631



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 01 สิงหาคม 2010, 18:11:12 »

สมมุติ column แรกชื่อ id และ column 2 ชื่อ name ให้ใช้คำสั่งตามนี้
update A set name='มานี'  where id=1
update A set name='มานะ'  where id=2

คำสั่งมันพื้นๆ มันน่าจะมีอะไรที่ไม่ได้บอกมาในคำถามหรือเปล่าครับ
บันทึกการเข้า

tksumeth
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 13



ดูรายละเอียด
« ตอบ #2 เมื่อ: 02 สิงหาคม 2010, 03:11:30 »

สมมุติ column แรกชื่อ id และ column 2 ชื่อ name ให้ใช้คำสั่งตามนี้
update A set name='มานี'  where id=1
update A set name='มานะ'  where id=2

คำสั่งมันพื้นๆ มันน่าจะมีอะไรที่ไม่ได้บอกมาในคำถามหรือเปล่าครับ

 wanwan017 ขอบคุณมาก ๆ ครับ แต่ผมลืมเอาจุดประสงค์ใส่ไปด้วย แต่ผมไม่รู้จะอธิบายยังไงอ่ะครับ
เอาเป็นว่า จุดประสงค์หลักของผมคือจะเอาไว้เปลี่ยนตำแหน่งของการแสดงผลข้อมูล โดยอิงจาก Field[Position] โดยใช้ตารางข้างล่างนี้เลยนะครับ

Table[Category]
IDNamePosition
1A2
2B4
3C1
4D3

ผมต้องการจะเปลี่ยนตำแหน่งจากตำแหน่งที่ 1 ไปไว้ตำแหน่งที่ 4 โดยรู้แค่ตำแหน่ง (โดยกำหนดว่าไม่รู้ ID ของตำแหน่ง 1 และ 4)
โดยที่ลองใช้คำสั่ง
UPDATE Category SET Position = 4 WHERE Position = 1
UPDATE Category SET Position = 1 WHERE Position = 4
เมื่อรันใช้คำสั่งข้างต้นแล้วก็จะได้

Table[Category]
IDNamePosition
1A2
2B4
3C1
4D3

ผลออกมาไม่เปลี่ยนแปลง
ผมก็เลยต้อง
AA = SELECT * FROM Category WHERE Position = 1
แล้วก็เอา AA[ID] มา
BB = SELECT * FROM Category WHERE Position = 4
แล้วก็เอา BB[ID] มา

แล้วก็มา
UPDATE Category SET Position = 4 WHERE ID = AA[ID]
UPDATE Category SET Position = 1 WHERE ID = BB[ID]

ผลก็คือ

Table[Category]
IDNamePosition
1A2
2B1
3C4
4D3

สรุป กว่ามันจะสลับตำแหน่ง Query ไปสะหลายรอบเลย ผมเลยอยากรู้ว่ามันจะมีคำสั่งที่เป็นคำสั่งสำเร็จรูปของ MySQL รึเปล่าครับเอาแบบว่า
UPDATE Category SWAP(Position) WHERE Postion = 1 AND Postion = 4 (มั่วไปงั้น ๆ)

ปล.อาจจะงงไปนิดนะครับ เพราะผมไม่รู้จะอธิบายยังไง แค่อยากรู้ว่าจะมีคำสั่งง่าย ๆ รึเปล่า เมื่อเรารู้แค่ "ตำแหน่ง" โดยไม่รู้ว่าคีย์หลักคืออะไร?
 wanwan017
บันทึกการเข้า
planetteam
ก๊วนเสียว
*

พลังน้ำใจ: 12
ออฟไลน์ ออฟไลน์

กระทู้: 324



ดูรายละเอียด
« ตอบ #3 เมื่อ: 02 สิงหาคม 2010, 09:29:10 »

พึ่งรู้ว่า mysql มี function swap ด้วย
บันทึกการเข้า

ขาย สคริป 25satang 20000.- bath สคริป ประมูล
 ขายระบบรับตัดบัตรทรูมันนี่

รับเขียนโปรแกรมตัดบัตรทรู,ไอเทมมอล,เวปส่ง sms ,เวปคลิปวีดีโอ,บอดพิคโพส,ออโต้โพส และอื่นๆ
ภาษาที่เขียน php,vb.net,asp.net,c#.net,delphi
http://www.goto69.com ผลงานของทีมทางด้านโปรแกรมเมอ

เบอร์โทร 0853941973  อีเมล์ [email protected]
Extra Cash
สมุนแก๊งเสียว
*

พลังน้ำใจ: 268
ออฟไลน์ ออฟไลน์

กระทู้: 631



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 02 สิงหาคม 2010, 10:01:48 »

ตามคำขอครับ ให้ Join ระหว่าง table เดียวกัน แต่เอาค่าที่ต่างกันมา Join กัน Join กัน
ปกติเราจะเคยเห็นแต่การ Join ค่าเดียวกัน เลยลืมนึกไปว่าเราสามารถ Join ค่าต่างกันได้

UPDATE Category AS c1
JOIN Category AS c2 ON (c1.Position=1 AND c2.Position=4) OR (c1.Position=4 AND c2.Position=1)
SET c1.Position=c2.Position, c2.Position=c1.Position

การ Join แบบนี้ต้องระวังอย่าลืมใส่ index ให้ Position ด้วย เพราะถ้า table ใหญ่มากแล้วไม่ได้ index จะทำให้อืดมาก
บันทึกการเข้า

tksumeth
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 13



ดูรายละเอียด
« ตอบ #5 เมื่อ: 07 สิงหาคม 2010, 19:19:30 »

พึ่งรู้ว่า mysql มี function swap ด้วย

ผมมั่วเอาครับ

ตามคำขอครับ ให้ Join ระหว่าง table เดียวกัน แต่เอาค่าที่ต่างกันมา Join กัน Join กัน
ปกติเราจะเคยเห็นแต่การ Join ค่าเดียวกัน เลยลืมนึกไปว่าเราสามารถ Join ค่าต่างกันได้

UPDATE Category AS c1
JOIN Category AS c2 ON (c1.Position=1 AND c2.Position=4) OR (c1.Position=4 AND c2.Position=1)
SET c1.Position=c2.Position, c2.Position=c1.Position

การ Join แบบนี้ต้องระวังอย่าลืมใส่ index ให้ Position ด้วย เพราะถ้า table ใหญ่มากแล้วไม่ได้ index จะทำให้อืดมาก

ขอบคุณมาก ๆ ครับ  wanwan017
บันทึกการเข้า
scrop
Newbie
*

พลังน้ำใจ: 3
ออฟไลน์ ออฟไลน์

กระทู้: 29



ดูรายละเอียด
« ตอบ #6 เมื่อ: 07 สิงหาคม 2010, 21:16:33 »

ทดลองอีกสักทางเลือกหนึ่งครับ

update Category as A, Category as B set A.Position = 3, B.Position = 2 where A.Position = 2 and B.Position = 3

ก็ใช้ได้ดีครับ
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
พิมพ์