কম্পিউটার টিউটোরিয়াল

MySQL-এ SUBSTRING_INDEX() দিয়ে কমা-সেপারেটেড সংখ্যার সেটের প্রথম সংখ্যা দিয়ে ORDER BY করা


SUBSTRING_INDEX + CAST দিয়ে কমা-সেপারেটেড স্ট্রিংয়ের প্রথম সংখ্যা অনুযায়ী সাজানো

MySQL-এ কমা-সেপারেটেড সংখ্যার স্ট্রিং (যেমন '245,654,76,89,98') থাকলে, SUBSTRING_INDEX(str, ',', 1) দিয়ে প্রথম কমার আগের অংশ (প্রথম সংখ্যা) বের করে CAST(... AS UNSIGNED) দিয়ে সংখ্যায় রূপান্তর করেই সাজানো যায়।

টেবিল ও ডেটা

mysql> CREATE TABLE DemoTable (SetOfNumbers TEXT);
mysql> INSERT INTO DemoTable VALUES('245,654,76,89,98'), ('2000,567,9090,6789'), ('1001,90595,657,99');

সব রেকর্ড

+--------------------+
| SetOfNumbers       |
+--------------------+
| 245,654,76,89,98   |
| 2000,567,9090,6789 |
| 1001,90595,657,99  |
+--------------------+

ORDER BY প্রথম সংখ্যা (CAST + SUBSTRING_INDEX)

mysql> SELECT * FROM DemoTable 
ORDER BY CAST(SUBSTRING_INDEX(SetOfNumbers, ',', 1) AS UNSIGNED);
+--------------------+
| SetOfNumbers       |
+--------------------+
| 245,654,76,89,98   |
| 1001,90595,657,99  |
| 2000,567,9090,6789 |
+--------------------+

ব্যাখ্যা

  • SUBSTRING_INDEX(SetOfNumbers, ',', 1) — প্রথম কমার আগের সাবস্ট্রিং (প্রথম সংখ্যা) রিটার্ন করে।
  • CAST(... AS UNSIGNED) — স্ট্রিংকে বড় পূর্ণসংখ্যায় কনভার্ট করে (স্ট্রিং কম্প্যারিজন এড়াতে)۔
  • সাজানো হয়েছে: 245 → 1001 → 2000 (সংখ্যাসূচক অর্ধমুখী)۔

নোট

  • নেগেটিভ সংখ্যা থাকলে SIGNED ব্যবহার করুন।
  • SUBSTRING_INDEX(str, delim, count) — count পজিটিভ হলে বাম থেকে, নেগেটিভ হলে ডান থেকে গড়ে।
  • পারফরম্যান্স: প্রতিটি রোতে ফাংশন কল, ইনডেক্স ব্যবহার হয় না। বড় টেবিলে জেনারেটেড কলাম + ইনডেক্স ভালো।
  1. MySQL-এ ORDER BY DESC LIMIT 3 দিয়ে প্রথম ৩ রেকর্ড দেখানো

  2. MySQL কোয়েরি: শেষ কোয়েরিতে সারির সংখ্যা জানার পদ্ধতি

  3. MySQL কোয়ারি: মডুলাস (MODULUS) ফলাফলের ভিত্তিতে ORDER BY করা

  4. MySQL에서 데이터베이스의 테이블 개수 조회하기