Mysql
 sql >> база данни >  >> RDS >> Mysql

Има ли SQL техника за подреждане чрез съвпадение на множество критерии?

Ако разбрах правилно, изглежда, че можете да използвате изрази във вашия ORDER BY , по начин, подобен на приетия отговор, даден на следната публикация за препълване на стека:

Следователно вашата заявка може да изглежда така:

SELECT    imageID
FROM      ...
JOIN      ...
WHERE     designID = 100          
ORDER BY  garmentID = 1 DESC,
          colorID = 5 DESC,
          sizeID = 10 DESC;

Обърнете внимание, че garmentID , colorID и sizeID не се използват като филтри в WHERE клауза. Стойностите се използват само в ORDER BY изрази.

Тестов случай:

CREATE TABLE designs (designID int, garmentID int, colorID int, sizeID int);

INSERT INTO designs VALUES (100, 1, 1, 1);
INSERT INTO designs VALUES (100, 1, 2, 2);
INSERT INTO designs VALUES (100, 1, 5, 3);
INSERT INTO designs VALUES (100, 1, 5, 10);
INSERT INTO designs VALUES (100, 1, 5, 15);
INSERT INTO designs VALUES (100, 1, 8, 20);
INSERT INTO designs VALUES (100, 2, 5, 10);
INSERT INTO designs VALUES (100, 2, 6, 15);
INSERT INTO designs VALUES (101, 1, 1, 1);
INSERT INTO designs VALUES (101, 2, 1, 1);

Резултат:

SELECT    * 
FROM      designs 
WHERE     designID = 100 
ORDER BY  garmentID = 1 DESC, 
          colorID = 5 DESC, 
          sizeID = 10 DESC;

+----------+-----------+---------+--------+
| designID | garmentID | colorID | sizeID |
+----------+-----------+---------+--------+
|      100 |         1 |       5 |     10 |
|      100 |         1 |       5 |      3 |
|      100 |         1 |       5 |     15 |
|      100 |         1 |       1 |      1 |
|      100 |         1 |       2 |      2 |
|      100 |         1 |       8 |     20 |
|      100 |         2 |       5 |     10 |
|      100 |         2 |       6 |     15 |
+----------+-----------+---------+--------+
8 rows in set (0.02 sec)

Обърнете внимание как редът, който съответства на посочения garmentID , colorID и sizeID е първо. Ако това не стане, редовете, които съответстват на garmentID и colorID са следващите. След това редовете, които съвпадат само с garmentID последвам. След това останалите, които съвпадат само с designID филтър на WHERE клауза.

Вярвам, че си струва да направите това в SQL. Като

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преобразувайте изхода на MySQL заявка в utf8

  2. Как да съхранявате и извличате текстови данни в MySQL, запазвайки прекъсванията на редовете?

  3. Инсталиране на mysql-libs на сървър с MySQL-Server5.5

  4. Как мога да прехвърля int към bit в MySQL 5.1?

  5. Повтарящи се събития от календара и някои последни изчисления