ฉันสงสัยว่ามีคำสั่งซื้อที่ไม่อยู่ (อาจเป็นวิธีที่ดีกว่า) ตามลำดับของค่าในประโยค IN ()
ปัญหาคือฉันมี 2 แบบสอบถามหนึ่งที่ได้รับ ID ทั้งหมดและที่สองที่ดึงข้อมูลทั้งหมด อันแรกสร้างลำดับของ ID ที่ฉันต้องการลำดับที่สองโดย ID จะอยู่ในข้อ IN () ตามลำดับที่ถูกต้อง
ดังนั้นมันจึงเป็นสิ่งที่ต้องการ (เรียบง่ายมาก):
SELECT id FROM table1 WHERE ... ORDER BY display_order, name
SELECT name, description, ... WHERE id IN ([id's from first])
ปัญหาคือแบบสอบถามที่สองไม่ส่งคืนผลลัพธ์ในลำดับเดียวกันกับที่ ID ถูกใส่ลงในส่วนคำสั่ง IN ()
ทางออกหนึ่งที่ฉันได้พบคือการใส่ ID ทั้งหมดลงในตาราง temp ที่มีฟิลด์การเพิ่มอัตโนมัติซึ่งจะเข้าร่วมในแบบสอบถามที่สอง
มีตัวเลือกที่ดีกว่านี้ไหม?
บันทึก:เนื่องจากมีการเรียกใช้แบบสอบถามครั้งแรก "โดยผู้ใช้" และครั้งที่สองเรียกใช้ในกระบวนการพื้นหลังจึงไม่มีวิธีรวมแบบสอบถาม 2 เป็น 1 โดยใช้แบบสอบถามย่อย
ฉันใช้ MySQL แต่ฉันคิดว่ามันอาจมีประโยชน์ที่จะให้สังเกตว่ามีตัวเลือกใดบ้างสำหรับฐานข้อมูลอื่นเช่นกัน
IN
และFIELD
พารามิเตอร์จะเท่ากัน การทำสิ่งนี้ในรหัสโปรแกรมอาจเร็วขึ้นโดยใช้ความรู้เพิ่มเติมนั้น แน่นอนว่ามันอาจฉลาดกว่าที่จะวางภาระนี้ให้กับลูกค้าแทนที่จะเป็นเซิร์ฟเวอร์หากคุณมีประสิทธิภาพของเซิร์ฟเวอร์