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

Поиск целой таблицы в mySQL для строки

Я пытаюсь найти целую таблицу в mySQL для строки.

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

Я не могу понять, как легко искать несколько полей; вот подробности:

Таблица - это "клиенты". Он имеет около 30 полей и 800 записей, что слишком сильно, чтобы отобразить все сразу в браузере. Я хотел бы найти имя (например, "Mary" ), но оно может быть в поле shipping_name field или billing_name field или email и т.д.

Я хотел бы искать все поля для любых записей, содержащих строку "Мэри". Это то, что я думаю, должно работать, но не делает:

SELECT * FROM `clients` IN 'Mary'
4b9b3361

Ответ 1

Попробуйте что-то вроде этого:

Select * from clients where Concat(field1, '', field2, '', fieldn) like "%Mary%"

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

Изменить: могут возникнуть проблемы с полями NULL, поэтому на всякий случай вы можете использовать IFNULL(field_i, '') вместо field_i

Чувствительность к регистру: вы можете использовать нечувствительную к регистру сортировку или что-то вроде

... Where lower(concat(...)) like lower("%Mary%")

Просто найдите все поле. Я считаю, что невозможно сделать SQL-запрос, который будет искать по всему полю без явного объявления поля для поиска. Причина в том, что существует теория реляционных базы данных и строгие правила манипулирования реляционными данными (что-то вроде реляционной алгебры или codd-алгебры, это то, из чего состоит SQL), а теория не допускает таких вещей, как "просто искать все поля". Конечно, фактическое поведение зависит от конкретной реализации поставщика. Но в общем случае это невозможно. Чтобы убедиться, проверьте синтаксис оператора select (where, который будет выполняться).

Ответ 2

Определите все поля, которые могут быть связаны с вашим поиском, и затем используйте запрос типа:

SELECT * FROM clients
WHERE field1 LIKE '%Mary%'
   OR field2 LIKE '%Mary%'
   OR field3 LIKE '%Mary%'
   OR field4 LIKE '%Mary%'
   ....
   (do that for each field you want to check)

Использование LIKE '%Mary%' вместо = 'Mary' будет искать поля, содержащие некоторые символы + 'Mary' + someCaracters.

Ответ 3

Решение на основе PHP для поиска всей таблицы! Строка поиска - $string. Это общее и будет работать со всеми таблицами с любым количеством полей

$sql="SELECT * from client_wireless";
$sql_query=mysql_query($sql);
$logicStr="WHERE ";
$count=mysql_num_fields($sql_query);
for($i=0 ; $i < mysql_num_fields($sql_query) ; $i++){
 if($i == ($count-1) )
$logicStr=$logicStr."".mysql_field_name($sql_query,$i)." LIKE '%".$string."%' ";
else
$logicStr=$logicStr."".mysql_field_name($sql_query,$i)." LIKE '%".$string."%' OR ";
}
// start the search in all the fields and when a match is found, go on printing it .
$sql="SELECT * from client_wireless ".$logicStr;
//echo $sql;
$query=mysql_query($sql);

Ответ 4

В дополнение к соответствие шаблону с ключевым словом "like". Вы также можете выполнить поиск используя fulltext, как показано ниже:

SELECT * FROM clients WHERE MATCH (shipping_name, billing_name, email) AGAINST ('mary')

Ответ 5

Если вы просто ищете какой-то текст и не нуждаетесь в наборе результатов для программирования, вы можете установить HeidiSQL бесплатно (I используя v9.2.0.4947).

Щелкните правой кнопкой мыши любую базу данных или таблицу и выберите "Найти текст на сервере".

Все совпадения отображаются на отдельной вкладке для каждой таблицы - очень приятно.

Пугающе полезный и сэкономил мне часы. Забудьте о беспорядочном запросе!

Ответ 6

Если вы используете Sublime, вы можете легко генерировать сотни или тысячи строк, используя Text Pastry в сочетании с несколькими выборами строк и Emmet.

Итак, в моем случае я установил тип документа в html, затем набрал div*249, нажмите вкладку, и Emmet создает 249 пустых div. Затем, используя множественный выбор, я набрал col_id_ в каждом из них и запускал Text Pastry, чтобы вставить инкрементный номер id. Затем с повторным выбором вы можете удалить разметку div и заменить ее синтаксисом MySQL.

Ответ 7

по конкретным требованиям для поиска будет работать следующее:

select * form table_name where (column_name1='%var1%' or column_name2='var2' or column_name='%var3%') and column_name='var';

Если вам нужен запрос для поиска данных из базы данных, это будет работать отлично.