MySQL udostępnia funkcję łańcuchową o nazwie FIELD(), która przyjmuje zmienną liczbę argumentów. Wartością zwracaną jest lokalizacja pierwszego argumentu na liście pozostałych. Innymi słowy:Co to jest funkcja serwera MS SQL Server podobna do funkcji FIELD() MySQL?
FIELD('d', 'a', 'b', 'c', 'd', 'e', 'f')
powróci 4, ponieważ "d" jest czwartym argumentem po pierwszym.
Ta funkcja umożliwia sortowanie wyników zapytania na podstawie bardzo szczegółowej kolejności. W przypadku mojej obecnej aplikacji są cztery statusy, które muszę zarządzać: aktywne, zatwierdzone, odrzucone i przesłane. Jeśli jednak po prostu zamawiam przez kolumnę statusu, uważam, że użyteczność wynikowej listy jest mniejsza, ponieważ odrzucone i aktywne elementy statusu są ważniejsze niż te przesłane i zatwierdzone.
W MySQL mogę to zrobić:
SELECT <stuff> FROM <table> WHERE <conditions> ORDER BY FIELD(status, 'rejected', 'active','submitted', 'approved')
a wyniki zostaną uporządkowane tak, że odrzucone zostały pierwsze pozycje, a następnie aktywne, i tak dalej. Tak więc wyniki zostały uporządkowane w malejącym znaczeniu dla odwiedzających.
Mogę utworzyć osobną tabelę, która wylicza ten poziom ważności dla statusów, a następnie zamawiam zapytanie w porządku malejącym, ale pojawiły się one kilka razy od czasu przejścia na MS SQL Server, więc pomyślałem, że " d zapytać, czy mogę uniknąć dodatkowej tabeli i nieco bardziej złożonych zapytań za pomocą wbudowanej funkcji podobnej do FIELD MySQL().
Dziękuję
David Kees
niesamowite rzeczy! Dzięki. –