2010-05-30 2 views
1

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

Пример:

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

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

+0

Структура таблицы будет меняться большую часть времени в моем случае. Поэтому мы можем предположить, что у нас есть доступ ко всей таблице с именами столбцов и введите MySQL-запросы. –

+0

Я добавил пример. –

ответ

1

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

[Подлинный ответ вымыты.]

EDIT: Обновленное сообщение просто просит колонку. В этом случае вам не нужно просматривать и можете просто запустить этот запрос

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

Привет, см. Мой обновленный пост. – mdma

+0

Вау, ваше решение кажется действительно хорошим. Он легко работал с моей первой таблицей. Позвольте мне попробовать это с другими столами, и я вернусь к вам. Благодаря! –

+0

Причина, по которой я не знаю о функциях столбцов, заключается в том, что таблицы создаются вручную пользователем в пустой таблице. Пользователь не указывает функции, он/она просто записывает данные в таблицу и сохраняет их. –

0

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

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

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

0

Вы проектируете эту таблицу с повторяющимися группами, которые не удовлетворяют First Normal Form ,

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

Подробнее о правилах database normalization.

+0

Причина, по которой у меня нет нормализованных таблиц, заключается в том, что таблицы создаются вручную пользователем, записывающим данные в ячейки пустой таблицы. Пользователь не указывает функции, он/она просто записывает данные в таблицу и сохраняет их. Это часть нашего исследовательского проекта, где мы затем пытаемся вывести функции, которые могут существовать между столбцом и нормализовать таблицы. –

+1

Я могу предсказать вывод вашего исследования: * позволить пользователю вводить данные о поставке, но не код * (DDL считается кодом). –

Смежные вопросы