Индексный поиск в таблице MySQL на PHP
Формулировка задачи:
Прошу помощи, коллеги!
Ситуация следующая:
Есть таблица в БД MySQL. Для простоты пусть имя таблицы будет Tabl1.
В таблице есть проиндексированное уникальное поле ID и текстовое поле Naimen.
Также у меня есть в виде текстовой строки список различных значений ID. Этот список никак не упорядочен, может иметь различную длину (несколько десятков или сотен значений), примерно такого вида:
"23,654,45,789,456,147,852,369,1..."
Мне надо создать в соответствии с этим списком - список состоящий из значений поля Naimen, соответствующих значениям ID из первого списка, примерно такого вида:
"Иванов,Петров,Сидоров,Соловьев,..."
В принципе, я понимаю, что можно брать из первого списка очередной ID и выполнять запрос типа
"select Naimen from Tabl1 where ID = $TekID"
с этим вариантом решения мне всё понятно, но если в списке несколько сотен ID, мне кажется как-то совсем не рационально и долго выполнять несколько сотен запросов к одной и той же таблице.
Есть ли возможность открыть таблицу Tabl1 (именно таблицу, а не запрос к ней)
и не закрывая таблицу выполнять в ней индексный поиск по полю ID выбирая в цикле очередное значение из списка с ID и вытаскивать из таблицы соответствующее значения поля Naimen?
А уже после перебора всех значений - закрыть таблицу.
Знаю, что в других СУБД и языках программирования есть такая возможность.
Но сейчас мне надо реализовать это именно в связке MySQL + PHP.
Решение задачи: «Индексный поиск в таблице MySQL на PHP»
textual
Листинг программы
$ids = "23,654,45,789,456,147,852,369,1"; $query = "SELECT Naimen FROM Tabl1 WHERE ID IN ({$ids})"; // или так, если список наименований тоже нужен в одну строку: $query = "SELECT GROUP_CONCAT(Naimen) AS str FROM Tabl1 WHERE ID IN ({$ids})";
Объяснение кода листинга программы
В представленном коде:
$ids =
23,654,45,789,456,147,852,369,1;
- создается переменная$ids
, которая содержит список ID записей для выборки из таблицы MySQL.$query =
SELECT Naimen FROM Tabl1 WHERE ID IN ({$ids});
- создается SQL-запрос для выборки записей из таблицыTabl1
, где значение поляID
соответствует одному из значений в переменной$ids
.$query =
SELECT GROUP_CONCAT(Naimen) AS str FROM Tabl1 WHERE ID IN ({$ids});
- создается SQL-запрос для выборки записей из таблицыTabl1
, где значение поляID
соответствует одному из значений в переменной$ids
. В этом запросе используется функцияGROUP_CONCAT
, которая объединяет значения поляNaimen
в одну строку. Результат запроса будет содержать только одно полеstr
, которое будет являться объединенной строкой значений поляNaimen
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д