Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में IN() क्लॉज का उपयोग करते समय सॉर्टिंग से कैसे बचें?


MySQL में FIND_IN_SET() का उपयोग करके IN() क्लॉज के क्रम को बनाए रखना

MySQL में IN() क्लॉज परिणामों को कॉलम के अनुसार सॉर्ट कर देता है। मूल क्रम बनाए रखने के लिए ORDER BY FIND_IN_SET() का उपयोग करें।

उदाहरण

टेबल बनाएं:

mysql> create table ProductStock (
    -> ProductId int,
    -> ProductName varchar(20),
    -> ProductQuantity int,
    -> ProductPrice float
    -> );

डेटा डालें:

mysql> insert into ProductStock values(1, 'Product-101', 10, 500.56);
mysql> insert into ProductStock values(25, 'Product-111', 5, 150.00);
mysql> insert into ProductStock values(67, 'Product-311', 7, 1000.50);
mysql> insert into ProductStock values(55, 'Product-561', 8, 900.00);
mysql> insert into ProductStock values(75, 'Product-221', 15, 670.56);

विशिष्ट क्रम में चुनें (25, 55, 67, 75, 1):

mysql> select * from ProductStock
    -> where ProductId IN (25, 55, 67, 75, 1)
    -> order by find_in_set(ProductId, '25,55,67,75,1');

परिणाम (निर्दिष्ट क्रम में):

+-----------+-------------+-----------------+--------------+
| ProductId | ProductName | ProductQuantity | ProductPrice |
+-----------+-------------+-----------------+--------------+
|        25 | Product-111 |               5 |         150  |
|        55 | Product-561 |               8 |         900  |
|        67 | Product-311 |               7 |       1000.5 |
|        75 | Product-221 |              15 |       670.56 |
|         1 | Product-101 |              10 |       500.56 |
+-----------+-------------+-----------------+--------------+

बिना ORDER BY (डिफ़ॉल्ट सॉर्टेड)

+-----------+-------------+-----------------+--------------+
| ProductId | ProductName | ProductQuantity | ProductPrice |
+-----------+-------------+-----------------+--------------+
|         1 | Product-101 |              10 |       500.56 |
|        25 | Product-111 |               5 |         150  |
|        55 | Product-561 |               8 |         900  |
|        67 | Product-311 |               7 |       1000.5 |
|        75 | Product-221 |              15 |       670.56 |
+-----------+-------------+-----------------+--------------+

MySQL 8.0+ में FIELD() फ़ंक्शन

ORDER BY FIELD(ProductId, 25, 55, 67, 75, 1)

FIELD() FIND_IN_SET() से तेज़ है और स्ट्रिंग पार्सिंग नहीं करता।

नोट

  • FIND_IN_SET() स्ट्रिंग में कॉमा से अलग मान खोजता है
  • मानों में कॉमा नहीं होना चाहिए
  • बड़े IN सूचियों के लिए अस्थायी टेबल या CTE बेहतर हो सकता है
  1. - MySQL में AND/OR का उपयोग करके चयन क्वेरी निष्पादित करें

    AND और OR तार्किक ऑपरेटर को मिलाकर एक ही क्वेरी में कई फ़िल्टर शर्तें लागू करें। टेबल बनाना और डेटा डालना CREATE TABLE DemoTable ( StudentId INT, StudentName VARCHAR(20), StudentSubject VARCHAR(20) ); Query OK, 0 rows affected (0.62 sec) INSERT INTO DemoTable VALUES (10,Chris,MongoDB

  1. - MySQL में शर्त के साथ ORDER BY और SELECT कैसे करें?

    कंडीशनल ORDER BY: जीरो वैल्यू अंत में किसी कॉलम को सॉर्ट करते समय खास मान (जैसे 0) को अंत में रखने और बाकी को नॉर्मल ऑर्डर में रखने के लिए बूलियन एक्सप्रेशन का उपयोग करें। सिंटैक्स SELECT * FROM yourTableName ORDER BY yourColumnName = 0, yourColumnName; टेबल बनाना और डेटा इन्सर्ट करना CREATE TABL

  1. - MySQL UNION SELECT और IN क्लॉज एक ही क्वेरी में

    UNION और IN क्लॉज को संयोजित करना पहले टेबल बनाएं: create table DemoTable1 ( StudentId int, StudentName varchar(20) ); Query OK, 0 rows affected (1.24 sec) रिकॉर्ड डालें: insert into DemoTable1 values(210,Adam); Query OK, 1 row affected (0.11 sec) सभी रिकॉर्ड देखें: select * from DemoTable1; आउटप