MySQL-এ ORDER BY ক্লজে একাধিক LIKE কন্ডিশন যোগ করে সর্টিং প্রায়োরিটি নির্ধারণ করা যায়। MySQL-এ বুলিয়ান এক্সপ্রেশন TRUE=1, FALSE=0 রিটার্ন করে। একাধিক লাইক কন্ডিশন যোগ করে যেটি বেশি ম্যাচ করবে সেটি উপরে আসবে।
টেবিল ও ডেটা
mysql> CREATE TABLE demo2 (
-> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> name VARCHAR(100)
-> );
Query OK, 0 rows affected (1.53 sec)
mysql> INSERT INTO demo2 (name) VALUES
('John'), ('David'), ('John Smith'), ('John Doe'), ('David Miller'), ('Chris'), ('Bob Doe');
mysql> SELECT * FROM demo2; +----+--------------+ | id | name | +----+--------------+ | 1 | John | | 2 | David | | 3 | John Smith | | 4 | John Doe | | 5 | David Miller | | 6 | Chris | | 7 | Bob Doe | +----+--------------+
মাল্টিপল LIKE দিয়ে ORDER BY
প্রায়োরিটি: 'Doe' থাকলে +1, 'David' থাকলে +1। মোট স্কোর বড় হলে উপরে।
mysql> SELECT * FROM demo2
-> ORDER BY
-> (name LIKE '%Doe%') +
-> (name LIKE '%David%') DESC;
ফলাফল
+----+--------------+ | id | name | +----+--------------+ | 2 | David | -- David ম্যাচ (1), Doe না (0) = 1 | 4 | John Doe | -- Doe ম্যাচ (1), David না (0) = 1 | 5 | David Miller | -- David ম্যাচ (1), Doe না (0) = 1 | 7 | Bob Doe | -- Doe ম্যাচ (1), David না (0) = 1 | 1 | John | -- 0 | 3 | John Smith | -- 0 | 6 | Chris | -- 0 +----+--------------+
নোট: সমান স্কোর হলে অর্ডার অনির্দিষ্ট (ইনসার্ট অর্ডার অনুযায়ী)। টাই ব্রেকারের জন্য সেকেন্ডারি ORDER BY name যোগ করুন।