Comunidad de diseño web y desarrollo en internet online

hacer consulta a un campo de texto usando condicion

Citar            
MensajeEscrito el 04 Oct 2010 06:27 pm
HOla buen dia a todos, tengo una duda con respecto a como realizar una consulta a una de las bases de datos.

Tengo una base de datos donde una tabla tiene los siguientes campos:

id (consecutivo) int
nombre_empresa varchar
cobertura varchar (por estados, 1= Guerrero 2= Aguascalientes, etc)


un ejemplo de la tabla es el siguiente

id:1
nombre_empresa: soluciones integrales
cobertura: 1,2,3,5,17


cobertura se refiere a los estados donde tiene presencia la empresa

en la aplicacion el usuario elige un estado y ve las empresas que tengan cobertura en el estado que el selecciono.

como puedo hacer esa consulta a mi tabla en el campo cobertura

hay forma de que yo pueda hacer la consulta poniendo de condicion el numero del estado?


espero haberme explicado

saludos a todos

Por alexsauret

Claber

143 de clabLevel

1 tutorial

Genero:Masculino  

Desarrollador WEB

chrome
Citar            
MensajeEscrito el 05 Oct 2010 01:35 am
que tal :D

pues te puedo sugerir 2 soluciones para que resulevas tu problema

1.- Lo ideal seria que crearas otra tabla que almacene los estados donde tiene cobertura tu empresa algo asi.


tabla Empresa
-id_empresa
-nombre_empresa

tabla Estados
-id_estado
-nombre_estado

tabla Cobertura
-id_empresa
-id_estado

Pasando al ejemplo kedaria asi

[Tabla Empresa]
1
Soluciones integrales

[Tabla Estados]
1
Mexico
2
San Luis
3
Guadalajara
etc...

Ahora supongamos que la empresa "soluciones integrales" tiene cobertura en Mexico y Guadalajara
entonces tu tabla de coberturas quedaria asi:
[Tabla Coberturas]
1 --- 1 <=== Indica que la empresa id=1 "soluciones integrales" y estado id=1 Mexico
1 ---- 3 <=== Indica que la empresa id=1 "soluciones integrales" y estado id=3 Guadalajara


entoces cuando quieres verificar las coberturas de una empresa solo harias
SELECT b.nombre_estado
FROM cobertura a, estados b
WHERE a.id_estado=b.id_estado AND a.id_empresa= 1 <== 1 seria "soluciones integrales"

bueno asi tendrias un poco mas ordenada tu DB :lol:

la segunda solucion.

2.- si vas a almacenar los numeros correspondientes separados por coma en un solo campo ps podrias usar el Operador LIKE de SQL

SELECT * FROM empresas WHERE cobertura LIKE %$identificador.','%

osea que buscarias la cadena ejemplo "5,"
aunque no estoy mui convencido de esta jeje :oops:

Espero que alguna de las 2 soluciones te sirva. Aunque te recomendaria la opcion 1:D

Saludos :P

Por bbdarkclown

13 de clabLevel



 

México

chrome
Citar            
MensajeEscrito el 05 Oct 2010 04:17 pm
Hola Dark.

Gracias por tu apoyo.

Realmente a mi igual se me habia ocurrido tener una tabla de pura coburtara, con la misma estructura que tu me presentaste. Pero me puse a pensar y aclaro no se si este bien a como lo analice, pero supon que al principio tenga solo 10 empresas y cada una tiene una cobertura de 5 estados.

10 * 5 = 50 registros. hasta ese punto no suena descabellado el asunto, 50 registros es rapido que lo lea una bd sin mucho esfuerzo.


Pero se pone feo cuando siendo optimistas tengo afiliadas un ejemplo de 300 empresas y cada una tiene cobertura en 15 estados.

300 * 15 = 4500 registros, es ahi cuando ya empiezo a dudar si tener la tabla cobertura por separado sea lo mas conveniente.

Por eso se me ocurrio que para reducir drasticamente el numero de registros, seria agregar un campo a la tabla de empresas. el campo cobertura separando con una coma los id de los estados.


asi con el ejemplo anterior solo tendria 300 registros. Supongo que igual la tarea de encontrar una cadena dentro de un campo tiene su tiempo , pero creo que es mas factible que tener 4500 registros.


Igual segui investigando y encontre lo de la condicion LIKE que tu me pusiste tambien, lo voy a probar asi, y si funciona comparto aqui los resultados.


Gracias por el apoyo. saludos

Por alexsauret

Claber

143 de clabLevel

1 tutorial

Genero:Masculino  

Desarrollador WEB

msie8
Citar            
MensajeEscrito el 05 Oct 2010 05:13 pm

alexsauret escribió:

Pero se pone feo cuando siendo optimistas tengo afiliadas un ejemplo de 300 empresas y cada una tiene cobertura en 15 estados.

300 * 15 = 4500 registros, es ahi cuando ya empiezo a dudar si tener la tabla cobertura por separado sea lo mas conveniente.

4500 registros es nada para un buen motor de base de datos. Dale para adelante como te han dicho que además de ser la forma correcta te ahorrarás un montón de problemas.
Si te da tranquilidad tengo un par de sistemas webs andando que están trabajando con un promedio de 30.000 registros en sus tablas principales y no pasa nada.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 05 Oct 2010 05:21 pm
Hola driverop

Gracias por la ayuda.

El motor que estoy usando es mysql y estuve buscando info en la web y si ciertamente 4500 registros no es nada para la bd.

Probare lo del LIKE ya por pura cuestion de ego para ver si me sale, una vez que lo haya conseguido, si tomare la solucion que me brindaron ustedes para ahcer mas eficiente mi base de datos.

Repito tratare de hacer lo del LIKE como pura prueba porque nunco lo habia usado entonces es un buen pretexto para aprender a usarlo.

CUal quier cosa sobre el like reportare los resultados :p


Saludos

Por alexsauret

Claber

143 de clabLevel

1 tutorial

Genero:Masculino  

Desarrollador WEB

msie8
Citar            
MensajeEscrito el 16 Oct 2010 05:39 pm
Yo haría lo siguiente:
- En la base de datos daría un campo por cada estado del país y así podria tratarlos como lo que son: booleanos (las empresas o bien dan cobertura allí o no la dan, no hay más posibilidades).
- En el php haría un select en el que se buscaría los registros que den como verdaderos la consulta que le haces, así solo vas a recoger los que te interesen.

De todas formas, si quieres hacerlo como lo tienes hecho yo te diría que hicieras un select de todos los registros y que con php busques por cada registro en el campo de la cobertura si contiene la consulta que se le hace.

Personalmente me quedo con la primera.
Ya me dirás si te valió.

Por malcomcc

39 de clabLevel



Genero:Masculino  

Desarrollador Web/Multiplataforma/Gráfico

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.