Zastanawiam się, czy istnieje daleko (prawdopodobnie lepszy sposób) uporządkowania według kolejności wartości w klauzuli IN ().
Problem w tym, że mam 2 zapytania, jedno, które pobiera wszystkie identyfikatory, a drugie, które pobiera wszystkie informacje. Pierwsza tworzy kolejność identyfikatorów, według której chcę, aby druga sortowała. Identyfikatory są umieszczane w klauzuli IN () we właściwej kolejności.
Więc byłoby coś takiego (bardzo uproszczone):
SELECT id FROM table1 WHERE ... ORDER BY display_order, name
SELECT name, description, ... WHERE id IN ([id's from first])
Problem polega na tym, że drugie zapytanie nie zwraca wyników w tej samej kolejności, w jakiej identyfikatory są umieszczane w klauzuli IN ().
Jednym z rozwiązań, które znalazłem, jest umieszczenie wszystkich identyfikatorów w tabeli tymczasowej z polem automatycznie zwiększającym się, które jest następnie łączone z drugim zapytaniem.
Czy jest lepsza opcja?
Uwaga: Ponieważ pierwsze zapytanie jest uruchamiane „przez użytkownika”, a drugie w procesie w tle, nie ma możliwości połączenia zapytania 2 w 1 za pomocą zapytań podrzędnych.
Używam MySQL, ale myślę, że warto byłoby, gdyby zauważył, jakie opcje są dostępne również dla innych baz danych.
IN
iFIELD
parametry są równe. Wykonanie tego w kodzie programu może być szybsze dzięki wykorzystaniu tej dodatkowej wiedzy. Oczywiście rozsądniej byłoby przełożyć to obciążenie na klienta, a nie na serwer, jeśli myślisz o wydajności serwera.