2013-06-06 3 views
1

Это может показаться глупым, но мне просто интересно.mysql - Как фильтровать результаты без указания столбцов

У меня есть таблица с именем posts:

 
+----------+------------------+------+-----+---------+----------------+ 
| Field | Type    | Null | Key | Default | Extra   | 
+----------+------------------+------+-----+---------+----------------+ 
| id  | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| title | varchar(50)  | YES |  | NULL |    | 
| body  | text    | YES |  | NULL |    | 
| created | datetime   | YES |  | NULL |    | 
| modified | datetime   | YES |  | NULL |    | 
+----------+------------------+------+-----+---------+----------------+ 

Значения:

 
+----+-----------------------+----------------------------------------+---------------------+---------------------+ 
| id | title     | body         | created    | modified   | 
+----+-----------------------+----------------------------------------+---------------------+---------------------+ 
| 2 | A title once again!!! | And the post body follows. Tralalalala | 2013-06-03 13:13:44 | 2013-06-05 09:36:51 | 
| 3 | Title strikes back | This is really exciting! Not.   | 2013-06-03 13:13:46 | NULL    | 
| 11 | Tomcat    | Tommy boy!!! FFF      | 2013-06-04 16:33:22 | 2013-06-04 16:48:40 | 
| 12 | FFD     | dsfdsf         | 2013-06-04 16:48:56 | 2013-06-04 16:55:50 | 
| 13 | fdf     | dfdsf         | 2013-06-04 16:57:47 | 2013-06-05 09:36:54 | 
| 14 | GGD     | dsfdsf         | 2013-06-04 17:02:33 | 2013-06-04 17:02:33 | 
| 15 | GG#     | dsfdsfff322       | 2013-06-05 09:36:20 | 2013-06-05 09:36:28 | 
+----+-----------------------+----------------------------------------+---------------------+---------------------+ 

Скажем, я хочу, чтобы найти строку, которая имеет значение Th (не чувствительно к регистру), независимо от поля , Это похоже на выполнение функции быстрого поиска.

Обычно я хотел бы сделать что-то вроде: SELECT * FROM posts WHERE title LIKE '%Th%' OR body LIKE '%Th%'

Я не включать другие поля, потому что очевидно, что они не собираются принимать эти ценности.

Я хочу знать, есть ли ярлык для этого? Как SELECT * FROM posts LIKE '%Th%'.

Просьба сообщить. Благодарю.

+0

что проблема с SELECT * FROM сообщений WHERE Название LIKE '% Th%' ИЛИ ​​body LIKE '% Th%' – PSR

+0

@PSR На самом деле это не проблема, а просто представим, есть ли у меня 10 или более столбцов, которые действительно раздражают. Я просто хочу знать, есть ли ярлык, и это будет большой помощью. – NinjaBoy

ответ

2

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

Если вам нужно больше похожего на поисковое окно поведения, я бы предложил посмотреть на полнотекстовые функции MySQL; см:

http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

+0

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

0

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

Если вы хотите создать ярлык - вы можете написать функцию, которая принимает один параметр (строку поиска) и возвращает необходимые поля.

0

Боюсь, что нет.

Не уверен, что ваш вариант использования ... этот альтернативный подход работает для вашего случая использования?

mysql -u{user} -p{password} -h{hostname} {database_name} -B -e "{query}" | grep "{search_string}"

Он подключается к базе данных и запускает указанный запрос, возвращает результаты запроса в новых линиях, полей, разделенная табуляцией. Затем используйте утилиту Unix grep для фильтрации возвращаемых строк.

+1

Im не familliar с этим одним но спасибо для открывателя глаза. Im, используя mysql -u {user} -p {password} -h {hostname} {имя_базы_данных}, чтобы подключиться к удаленному серверу, но Im не familliar с остальными командами. – NinjaBoy

2

Язык SQL основан на предположении схемы быть известным. Таким образом, нет функциональности типа «поиск любого столбца». Как это работает против нетекстовых столбцов? Как насчет столбцов разных сортировок? Помимо языка, не имеющего функции, указание столбцов выражает ваше намерение следующему разработчику и что все, что угодно, должно быть главным соображением.

1

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

SELECT * 
FROM posts 
WHERE concat(title, ' ', body) LIKE '%Th%' 

Если вы ищете точное соответствие, то вы можете сделать:

select * 
from posts 
where 'Th' in (title, body) 
+0

Как насчет использования LIKE? Я попытался выбрать * из сообщений где «Th» в (название, тело), ​​но кажется, что ему нужно точное значение – NinjaBoy

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