สอบถามผู้รู้เกี่ยวกับคำสั่ง MySQL ครับ

เริ่มโดย tksumeth, 01 สิงหาคม 2010, 15:07:24

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

tksumeth

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

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

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

พอจะมีรู้คำสั่งแบบเจาะจงกับรูปแบบนี้รึเปล่าครับ
:wanwan017: ขอความกรุณาด้วยนะครับ

Extra Cash

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

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

[direct=http://www.prodipper.com]PRO DIPPER
ตัวแทนจำหน่าย สีลอกได้ Plasti Dip แท้
อย่างเป็นทางการจาก Performix อเมริกา
[/direct]
       [direct=http://www.votejung.com]โหวดจัง
       โปรโมทเว็บไซต์ฟรี![/direct]
       [direct=http://fbfansmaster.com]FB FANS MASTER
       Buy Facebook Likes[/direct]

tksumeth

อ้างถึงจาก: Extra Cash ใน 01 สิงหาคม 2010, 18:11:12
สมมุติ 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

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

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

เบอร์โทร 0853941973  อีเมล์ [email protected]

Extra Cash

ตามคำขอครับ ให้ 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 จะทำให้อืดมาก

[direct=http://www.prodipper.com]PRO DIPPER
ตัวแทนจำหน่าย สีลอกได้ Plasti Dip แท้
อย่างเป็นทางการจาก Performix อเมริกา
[/direct]
       [direct=http://www.votejung.com]โหวดจัง
       โปรโมทเว็บไซต์ฟรี![/direct]
       [direct=http://fbfansmaster.com]FB FANS MASTER
       Buy Facebook Likes[/direct]

tksumeth

อ้างถึงจาก: planetteam ใน 02 สิงหาคม 2010, 09:29:10
พึ่งรู้ว่า mysql มี function swap ด้วย

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

อ้างถึงจาก: Extra Cash ใน 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 จะทำให้อืดมาก

ขอบคุณมาก ๆ ครับ  :wanwan017:

scrop

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

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

ก็ใช้ได้ดีครับ