ฉันพยายามเลือกคอลัมน์ 2 จากแบบสอบถามย่อยในแบบสอบถามต่อไปนี้ แต่ไม่สามารถทำได้ พยายามสร้างตารางนามแฝง แต่ยังไม่สามารถหาได้
SELECT
DISTINCT petid,
userid,
(SELECT MAX(comDate) FROM comments WHERE petid=pet.id) AS lastComDate,
(SELECT userid FROM comments WHERE petid=pet.id ORDER BY id DESC LIMIT 1) AS lastPosterID
FROM
pet LEFT JOIN comments ON pet.id = comments.petid
WHERE
userid='ABC' AND
deviceID!='ABC' AND
comDate>=DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 2 MONTH);
โดยทั่วไปฉันพยายามรับlastComDate
& lastPosterID
จากแถวเดียวกัน - แถวซึ่งเป็นแถวล่าสุดในความคิดเห็นสำหรับสัตว์เลี้ยงที่เฉพาะเจาะจง โปรดแนะนำวิธีที่จะทำให้พวกเขาได้อย่างมีประสิทธิภาพ
ข้อความค้นหาด้านบนใช้งานได้ แต่ดูเหมือนว่ามีการเติมมากเกินไปเมื่อดึงแถวเดียวกันสองครั้ง ยิ่งกว่านั้นส่วนORDER BY
คำสั่งช้ากว่าฟังก์ชั่นรวมอย่างมาก - อย่างที่ฉันพบในขณะทำแบบสอบถาม ดังนั้นวิธีการหลีกเลี่ยงการเรียงลำดับจะได้รับการชื่นชม
1
หากคุณมีดัชนี (petid, id) บนตารางความคิดเห็นลำดับโดยอาจไม่ช้า แต่สิ่งแรกก่อน: ดูเหมือนว่าข้อความค้นหาของคุณกำลังขอสัตว์เลี้ยงทั้งหมดที่ userid 'ABC' แสดงความคิดเห็นไว้ ภายในสองเดือนที่ผ่านมาที่ deviceID ไม่ใช่ 'ABC' (แม้ว่าจะไม่ชัดเจนว่า deviceID ของตารางใดที่เป็นคอลัมน์ในอาจเป็นสัตว์เลี้ยงและอาจเป็นความคิดเห็น) และใครเป็นผู้วิจารณ์คนสุดท้ายและวันที่แสดงความคิดเห็นล่าสุด นั่นถูกต้องใช่ไหม?
—
Michael - sqlbot
@ Michael-sqlbot - ใช่นั่นคือสิ่งที่ฉันพยายามรวบรวม
—
BufferStack
deviceID
จากpets
ตาราง - หมายความว่าเพียงแค่ไม่ได้รับฉันสัตว์เลี้ยงที่ถูกส่งมาโดย 'เอบีซี' ตัวเอง