2012-08-13 22 views
19

Estoy tratando de buscar una cadena en una tabla completa en mySQL.Buscar una tabla completa en mySQL para una cadena

Quiero buscar todos los campos y todas las entradas de una tabla, devolviendo cada entrada completa que contiene el texto especificado.

No puedo encontrar la manera de buscar campos múltiples fácilmente; aquí están los detalles:

La tabla es "clientes". Tiene alrededor de 30 campos y 800 entradas, demasiado para mostrar todo a la vez en un navegador. Me gustaría buscar un nombre (es decir, "María"), pero podría ser en el shipping_name field o la billing_name field, o el campo email, etc.

me gustaría buscar todos los campos en busca de entradas que contienen la cadena "María". Esto es lo que creo que debería funcionar, pero no:

SELECT * FROM `clients` IN 'Mary' 

Respuesta

18

intentar algo como esto:

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

Es posible que desee ver documentos de SQL para obtener información adicional sobre los operadores de cadenas y expresiones regulares.

Editar: puede haber algunos problemas con los campos NULL, así que por si acaso es posible que desee utilizar IFNULL(field_i, '') en lugar de sólo field_i

Caso sensibilidad: se puede usar la intercalación insensible o algo así

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

Basta con buscar en todos los campos: creo que no hay forma de hacer una consulta SQL que busque en todos los campos sin declarar explícitamente el campo en el que buscar. La razón es que hay una teoría de rel bases de datos ational y reglas estrictas para manipular datos relacionales (algo así como álgebra relacional o álgebra de codd; de esto es de lo que proviene SQL), y la teoría no permite cosas como "solo busca en todos los campos". Por supuesto, el comportamiento real depende de la realización concreta del proveedor. Pero en el caso común, no es posible. Para estar seguro, verifique la sintaxis del operador select (sección where, a presice).

+2

Realmente estaba buscando una forma de no tener que escribir todos los campos de la tabla. Quiero buscar en todos los campos. Asumiría que algo tan simple es posible. También me di cuenta de que cuando escribo minúsculas "Mary" no encuentra "Mary". ¿Cómo puede hacer que no distinga entre mayúsculas y minúsculas y buscar TODOS los campos? – VoltzRoad

+0

podemos concat (*)? – Waqas

+2

¿Cuáles son las comillas simples vacías '', para? Gracias – KDawg

12

identificar todos los campos que podrían estar relacionados con su búsqueda y luego usar una consulta como:

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) 

Usando LIKE '%Mary%' en lugar de = 'Mary' buscará los campos que contiene someCaracters + 'Mary' + someCaracters.

+0

el problema aquí es que tengo que escribir la palabra "Mary" en 45 ocasiones para una consulta de búsqueda. Luego, me voy a tratar con el próximo cliente de mi lista ... por lo general 10-20 por día. Todo lo que intento hacer es sacar un registro de los clientes. No puede tomar más de 15 segundos – VoltzRoad

+4

Escriba un script y defina un @VARIABLE donde establezca ese nombre, lo escribirá una vez y solo tendrá que modificar esa variable. –

+0

Si está poniendo el término de búsqueda directamente en su SQL, entonces lo estas haciendo mal. Haz lo que dice Francis P. – nickdnk

3

¡Solución basada en PHP para buscar toda la tabla! La cadena de búsqueda es $ string. Esta es genérico y trabajará con todas las tablas con cualquier número de campos

$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); 
+1

esta es la mejor respuesta en todas las respuestas anteriores –

0

Si está utilizando sublime, puede generar fácilmente cientos o miles de líneas utilizando Text Pastry en conjunción con la selección de línea múltiple y Emmet.

Así que en mi caso establecí el tipo de documento en html, luego escribí div*249, presioné la pestaña y Emmet crea 249 divs vacíos. Luego, usando la selección múltiple, escribí col_id_ en cada uno y activé Text Pastry para insertar un número de identificación incremental.Luego, con la selección múltiple de nuevo, puede eliminar el marcado div y reemplazarlo con la sintaxis de MySQL.

3

Además de pattern matching con la palabra clave 'me gusta'. También puede realizar la búsqueda utilizando la función fulltext, como se muestra a continuación;

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

Si estás en busca de algún texto y no es necesario un conjunto de resultados a efectos de programación, usted podría install HeidiSQL gratis (estoy usando v9.2.0.4947).

Haga clic derecho en cualquier base de datos o tabla y seleccione "Buscar texto en el servidor".

Todas las coincidencias se muestran en una pestaña separada para cada tabla, muy agradable.

Increíblemente útil y me ahorró horas. ¡Olvídate de jugar con largas consultas!

+0

Wow esto es bueno. Ya uso Heidi y no sabía acerca de esta característica. – ds00424

0

requisito específico para el siguiente trabajo para la búsqueda:

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

si desea una consulta de búsqueda de datos de base de datos de este funcione a la perfección.

Cuestiones relacionadas