Поиск целой таблицы в mySQL для строки
Я пытаюсь найти целую таблицу в mySQL для строки.
Я хочу искать все поля и все входы таблицы, возвращая каждую полную запись, содержащую указанный текст.
Я не могу понять, как легко искать несколько полей; вот подробности:
Таблица - это "клиенты". Он имеет около 30 полей и 800 записей, что слишком сильно, чтобы отобразить все сразу в браузере. Я хотел бы найти имя (например, "Mary" ), но оно может быть в поле shipping_name field
или billing_name field
или email
и т.д.
Я хотел бы искать все поля для любых записей, содержащих строку "Мэри". Это то, что я думаю, должно работать, но не делает:
SELECT * FROM `clients` IN 'Mary'
Ответы
Ответ 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';
Если вам нужен запрос для поиска данных из базы данных, это будет работать отлично.