Подтвердить что ты не робот

Искать все столбцы таблицы, используя сингл, где условие с единственным ключевым словом в mysql

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

4b9b3361

Ответ 1

SELECT * FROM `some_table`
WHERE
CONCAT_WS('|',`column1`,`column2`,`column3`,`column4`,`column64`) # single condition, many columns
LIKE '%VT%'

Voila.

"|" разделитель, кстати, должен помешать вам найти совпадающие совпадения, где, например, столбец 1 заканчивается на 'V', а столбец2 начинается с 'T', что даст вам ложный положительный результат при поиске "VT".

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

Ответ 2

вы можете использовать где с несколькими условиями с OR

like

where
name = 'expected'
OR rate ='expected' 
OR country ='expected'

Ответ 3

Я не вижу, чтобы ваш запрос был простым, но длинным:

SET @term = "Somesearch";
SELECT id, title FROM sometable WHERE
    col1 LIKE '%@term%' OR
    col2 LIKE '%@term%' OR
    col3 LIKE '%@term%' ...;

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

"..." - это место, где вы поместите остальные 61 столбец/поля.

Ответ 4

Еще одна возможность - использовать FOR XML для получения всех столбцов для печати в одном поле... например:

SELECT c.*
FROM (
SELECT a.*
,( SELECT *
   FROM table_to_search b
   WHERE a.KeyField = b.KeyField
   FOR XML RAW) AS `Full_Text_Record`
FROM table_to_search a) c
WHERE c.`Full_Text_Record` LIKE '%Search_string%'

Может потребоваться некоторое время, если оно является особенно большой таблицей, но нужно грубо заставить вас выяснить, существует ли эта строка в любой таблице.

Ответ 5

Простейшим решением было бы использовать несколько ORs.

select * from TAB where col1 like "%VAR%" OR col2 like "%VAR%" OR......col64 like "%VAR%";

Вы можете использовать like или = в соответствии с требованием, но это потребует изменить ваш запрос каждый раз, когда вы добавляете новый столбец.

В качестве альтернативы вы можете взять SQLDump for that table, а затем search этот файл.

С некоторым Googling,

  • Посмотрите, полезен ли этот проект - http://code.google.com/p/anywhereindb/. Ищет все поля и похвалил многих.

  • Попробуйте использовать информацию из таблицы information_schema. Найдите все столбцы в таблице. Теперь попробуйте сформировать свой запрос, используя эту информацию.

Ответ 6

Если вы можете перевести этот синтаксис SQL Server в MySQL

WHERE
name = @keyword OR
country = @keyword OR
department = @keyword OR
@keyword IS NULL -- match all when search text is empty

Ответ 7

Можно написать один запрос, который будет генерировать запрос для каждого столбца в вашей таблице. В приведенном ниже примере схема ( "владелец" ) является "DEV_USER" Таблица с вашими 64 полями называется "CUSTOMER_INFO" Критерии поиска - это любой столбец со значением "VT" в нем:

select 'SELECT ' || COLUMN_NAME || ' FROM CUSTOMER_INFO
WHERE '  || COLUMN_NAME || q'# LIKE '%VT%';#'
FROM ALL_TAB_COLS 
WHERE OWNER = 'DEV_USER'
AND TABLE_NAME = 'CUSTOMER_INFO'; 

Этот запрос будет генерировать запрос для каждого поля для вас. Результатом выполнения вышеуказанного будет:

SELECT ADDRESS_1 FROM CUSTOMER_INFO
WHERE ADDRESS_1 LIKE '%VT%';

SELECT ADDRESS_2 FROM CUSTOMER_INFO
WHERE ADDRESS_2 LIKE '%VT%';

SELECT CITY FROM CUSTOMER_ADDRESSES_QASB
WHERE CITY LIKE '%VT%';

SELECT STATE_PROVINCE FROM CUSTOMER_INFO
WHERE STATE_PROVINCE LIKE '%VT%';

SELECT ZIP_POSTAL_CODE FROM CUSTOMER_INFO
WHERE ZIP_POSTAL_CODE LIKE '%VT%';
WHERE LATITUDE LIKE '%VT%';

... and so on for each column in the table

Затем вы просто вставляете те запросы, которые были сгенерированы из вашего первого запроса, на другую вкладку и запускайте их.

Надеюсь, что это поможет.: -)

Ответ 8

Вы можете использовать динамический SQL для генерации и выполнения запроса, который ищет все столбцы.

DELIMITER $$
CREATE PROCEDURE searchAllCols(inDB VARCHAR(64), inTable VARCHAR(64), search VARCHAR(32))
BEGIN
    SET @matches = (
        SELECT GROUP_CONCAT(CONCAT(''', COLUMN_NAME, '' LIKE "%', search, '%"') SEPARATOR ' OR ')
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE table_name = inTable and table_schema = inDB);
    SET @query = CONCAT('SELECT * FROM '', inDB, ''.'', inTable, '' WHERE ', @matches);
    PREPARE stmt FROM @query;
    EXECUTE stmt;
END
$$
DELIMITER ;
CALL searchAllCols('table_to_search', 'searchString');