запрос идентификаторов в соответствии с массивом идентификатора - PullRequest
2 голосов
/ 06 ноября 2010

мой сайт включает в себя MySQL базы данных с двумя таблицами. одна таблица имеет поле с именем 'id_array' и содержит строку, похожую на эту: '1,3,7,78,89,102. он представляет массив идентификаторов во второй таблице.

Какова лучшая стратегия получения идентификаторов во второй таблице? я хочу самый быстрый способ.

В настоящее время я использую 'SELECT * FROM first_table WHERE id IN (id_array)'.

Раньше я делал запросы один за другим, но я предполагаю, что это намного медленнее.

если бы у кого-то была лучшая структура, чтобы предложить мне его для БД, это было бы здорово. эта структура - лучшее, что я придумал, но я уверен, что она не так эффективна. Мне нужен быстрый и удобный способ найти все идентификаторы, которые принадлежат идентификатору из первой таблицы.

помощь будет оценена.

Ответы [ 2 ]

2 голосов
/ 06 ноября 2010

Значение через запятую означает, что данные денормализованы - предложение IN не будет работать для вас, поскольку оно работает с различными значениями.

Краткосрочное решение

Использование Функция MySQL FIND_IN_SET , например:

SELECT * 
  FROM first_table 
 WHERE FIND_IN_SET(id, id_array)

Долгосрочное решение

... не для хранения значений таким образом, что означает наличие таблицы для храненияотдельные значения и таблица для объединения этой таблицы различных значений с исходной таблицей.IE:

FIRST_TABLE

  • first_table_id (первичный ключ)

FIRST_TABLE_TYPE_CODES

  • type_code_id (первичный ключ)

FIRST_TABLE_TYPE_MAP

  • first_table_id (первичный ключ)
  • type_code_id (первичный ключ)
0 голосов
/ 06 ноября 2010

У вас есть поле, содержащее идентификаторы, с которыми связана запись в другой таблице?Возможно, вы захотите создать справочную таблицу, которая свяжет две таблицы вместе, чтобы помочь вам во многих отношениях.Опубликуйте немного больше или ваши настройки БД

...