Я знаю, что этот вопрос задавался несколько раз, и я прочитал все ответы, но ни один из них, похоже, не полностью решил мою проблему.
Я переключаюсь с базы данных MySQL на MS Accessбаза данных.В обоих случаях я использую скрипт php для подключения к базе данных и выполнения SQL-запросов.
Мне нужно найти подходящую замену для запроса, который я использовал для выполнения в mySQL.Я хочу:
- выполнить первый запрос и упорядочить записи в алфавитном порядке на основе одного из столбцов
- создать список идентификаторов, который отражает предыдущий алфавитный порядок
- выполнить второй запрос с предложением IN, примененным к списку идентификаторов и упорядоченным по этому списку.
В mySQL я выполнял последний запрос следующим образом:
SELECT name FROM users WHERE id IN ($name_ids) ORDER BY FIND_IN_SET(id,'$name_ids')
Поскольку FIND_IN_SET
доступен только в mySQL, а CHARINDEX
и PATINDEX
недоступны из моего php-скрипта, как я могу этого добиться?
Я знаю, что могу написать что-то вроде:
SELECT name
FROM users
WHERE id IN ($name_ids)
ORDER BY CASE id
WHEN ... THEN 1
WHEN ... THEN 2
WHEN ... THEN 3
WHEN ... THEN 4
END
но вы должны учитывать, что:
- список идентификаторов имеет переменную длину и элементы, потому что это зависит от первого запроса
- , что список может легко содержать тысячи элементов
У вас есть намеки на это?Есть ли способ программно построить оператор ORDER BY CASE ... WHEN ...
?Есть ли лучший подход, так как мой список идентификаторов может быть большим?
ОБНОВЛЕНИЕ: Я выполняю два отдельных запроса, потому что мне нужно получить доступ к двум разным таблицам.С базой данных это не очень просто, поэтому я попытаюсь привести пример: предположим, у меня есть таблица со списком пользователей и таблица со всеми книгами, которые есть у каждого пользователя на их книжной полке.
С базы данныхбыл разработан в mySQL, для каждой записи книги я сохраняю user_id в таблице books, чтобы иметь связь между пользователем и книгой.
Предположим теперь, что я хочу получить список всех пользователей, которыеесть книги с заголовком, начинающимся с буквы «а», и я хочу заказать пользователя на основе алфавитного порядка книг.Вот что я делаю:
- выполните первый запрос, чтобы найти все книги, которые начинаются с буквы «а», и отсортируйте по алфавиту
- , создайте список user_id, который должен отражатьВ алфавитном порядке книги
- выполните запрос в таблице пользователей, чтобы узнать имена пользователей и отсортировать их по списку user_id, чтобы получить требуемую сортировку по книге
Надеюсь, что это уточнитьчто мне нужно.