2011-12-22 2 views
3

Я хотел бы написать запрос, чтобы найти строку везде, где она существует.
Что-то, что будет работать, как:Как найти строку во всех таблицах и всех столбцах?

foreach(table in database) { 
    foreach(column in table) { 
     // in the end, i need to know, which columns in 
     // which tables that string appears. 
    } 
} 

Возможно ли это?

+3

Возможно ли это [проблема XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)? Можете ли вы дать нам обоснование вашего текущего требования? – Bojangles

+1

В любом случае, я заинтересован в решении этой проблемы *, я определенно мог бы ее использовать. * Моя причина состоит в том, чтобы обновлять URL-адреса с IP-адреса на всем сайте после его выхода в эфир (это утилита на панели управления), в настоящее время у меня есть система, которая регистрирует таблицы/столбцы для поиска, но это было бы проще , –

+0

спасибо, Jam, но это именно то, что мне нужно. Я взял бесконечно большую и грязную базу данных и должен знать, где некоторые значения. –

ответ

2

Могу ли я спросить, почему? Честно говоря, если это не то, что вам нужно сделать во время выполнения, я бы использовал mysqldump и использовал текстовый редактор для поиска.

Если вам нужно сделать это во время выполнения, вам придется что-то строить динамически. Вы можете использовать «show tables», чтобы получить список таблиц. Затем вы можете использовать show columns для каждой из этих таблиц. Затем вам нужно будет сделать какой-то оператор выбора в каждом столбце, который ищет ваш текст (используя локализацию или используя, например, пример).

Это будет очень медленный процесс, чтобы работать в режиме реального времени на сервере ...

+0

спасибо, дамп-решение, вероятно, сработает для меня, поскольку это что-то делать статически, а не во время выполнения, хотя мне бы очень хотелось узнать самую элегантную гипотезу, чтобы сделать это прямо через mySQL –

0

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

0

Я смею сказать, что это невозможно с (текущим) MySQL, поскольку метаданные (такие как имена столбцов) и данные (такие как значения полей) не могут быть частью одного и того же запроса.

Особенно

SELECT Field from (DESCRIBE <tablename>) 

выдаст ошибку, как будет

SELECT Field from (SHOW FIELDS FROM <tablename>) 

как будет

DECLARE flds CURSOR FOR DESCRIBE <tablename> 

в хранимой процедуре.

Это означает, что невозможно INSIDE MYSQL - это тривиально в PHP и freinds.

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