Индексный поиск в таблице 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})";

Объяснение кода листинга программы

В представленном коде:

  1. $ids =23,654,45,789,456,147,852,369,1; - создается переменная $ids, которая содержит список ID записей для выборки из таблицы MySQL.
  2. $query =SELECT Naimen FROM Tabl1 WHERE ID IN ({$ids}); - создается SQL-запрос для выборки записей из таблицы Tabl1, где значение поля ID соответствует одному из значений в переменной $ids.
  3. $query =SELECT GROUP_CONCAT(Naimen) AS str FROM Tabl1 WHERE ID IN ({$ids}); - создается SQL-запрос для выборки записей из таблицы Tabl1, где значение поля ID соответствует одному из значений в переменной $ids. В этом запросе используется функция GROUP_CONCAT, которая объединяет значения поля Naimen в одну строку. Результат запроса будет содержать только одно поле str, которое будет являться объединенной строкой значений поля Naimen.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5
Похожие ответы