MySQL-এ কোনো নির্দিষ্ট ID-এর আগের (previous) এবং পরের (next) রেকর্ড একসাথে পাওয়ার জন্য UNION ব্যবহার করা হয়।
সিনট্যাক্স
(SELECT * FROM yourTableName WHERE yourIdColumnName > yourValue ORDER BY yourIdColumnName ASC LIMIT 1) UNION (SELECT * FROM yourTableName WHERE yourIdColumnName < yourValue ORDER BY yourIdColumnName DESC LIMIT 1);
উদাহরণ
টেবিল তৈরি:
mysql> CREATE TABLE previousAndNextRecordDemo (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name VARCHAR(30)
-> );
১৩টি রেকর্ড ইনসার্ট (ID ১ থেকে ১৩):
mysql> SELECT * FROM previousAndNextRecordDemo;
+----+---------+ | Id | Name | +----+---------+ | 1 | John | | 2 | Sam | | 3 | Carol | | 4 | Bob | | 5 | Larry | | 6 | David | | 7 | Ramit | | 8 | Maxwell | | 9 | Mike | | 10 | Robert | | 11 | Chris | | 12 | James | | 13 | Jace | +----+---------+
ID ৮ (Maxwell)-এর প্রিভিয়াস ও নেক্সট:
mysql> (SELECT * FROM previousAndNextRecordDemo WHERE Id > 8 ORDER BY Id ASC LIMIT 1)
-> UNION
-> (SELECT * FROM previousAndNextRecordDemo WHERE Id < 8 ORDER BY Id DESC LIMIT 1);
+----+-------+ | Id | Name | +----+-------+ | 9 | Mike | | 7 | Ramit | +----+-------+
ব্যাখ্যা: প্রথম কোয়েরি ID ৮-এর বড় মানের ছোটোটি (৯), দ্বিতীয় কোয়েরি ID ৮-এর ছোট মানের বড়টি (৭)। UNION দিয়ে একসাথে দেখানো হয়েছে। এজ কেস: প্রথম রোয়ের জন্য প্রিভিয়াস নেই, শেষ রোয়ের জন্য নেক্সট নেই - তবে কোয়েরি এরর দিবে না, শুধু সেই অংশ খালি রিটার্ন করবে। MySQL 8.0+ এ LAG() এবং LEAD() উইন্ডো ফাংশন ব্যবহার করা আরও দক্ষ।