Найти столбец, который содержит данное значение в MySQL - PullRequest
1 голос
/ 31 мая 2010

У меня есть таблица в базе данных MySQL. Мне дают значение, которое встречается как значение ячейки в этой таблице, но я не знаю, какая это ячейка, то есть строка и столбец этой ячейки. Как наиболее эффективно найти столбец, к которому относится это значение? Заранее спасибо.

Пример:

Column_1 | Column_2 | Column_3
1        | 2        | 3
4        | 5        | 6
7        | 8        | 9

Теперь мне дано значение ввода "8". Я хочу знать, есть ли эффективный способ узнать, что значение "8" принадлежит Column_2.

Ответы [ 3 ]

2 голосов
/ 31 мая 2010

Немного странно, что вы не знаете, в каком столбце находятся данные, поскольку столбцы должны иметь четко определенную функцию.

[Исходный ответ вычищен.]

РЕДАКТИРОВАТЬ: Ваш обновленный пост просто просит столбец. В этом случае вам не нужно представление, и вы можете просто выполнить этот запрос

SELECT col FROM (
   SELECT "Column_1" AS col, Column_1 AS value FROM YourTable
   UNION ALL SELECT "Column_2", Column_2 FROM YourTable
   UNION ALL SELECT "Column_3", Column_3 FROM YourTable
) allValues
WHERE value=8;

Когда вы запустите этот запрос к вашей таблице, он вернет "Column_2"

0 голосов
/ 31 мая 2010

Вы разрабатываете эту таблицу с повторяющимися группами , что не удовлетворяет Первая нормальная форма .

Вам следует создать вторую таблицу и сохранить значения дляcolumn1, column2 и column2 в одном столбце, в трех строках.

Подробнее о правилах нормализации базы данных .

0 голосов
/ 31 мая 2010

Не зная больше о вашем приложении, у вас есть несколько вариантов:

  • Используйте встроенный полнотекстовый поиск MySQL. Вы можете проверить функцию MATCH в документации MySQL.
  • В зависимости от потребностей вашего приложения вы можете решить проиндексировать всю таблицу с помощью внешнего полнотекстового поискового индекса, такого как Solr или Sphynx. Это обеспечивает мгновенное время отклика, но вам нужно будет постоянно обновлять индекс.
  • Вы можете перебрать все столбцы в таблице, выполнив LIKE-запрос в MySQL (очень дорого по процессору и времени)
...