Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Duda con consulta SELECT y WHERE

Estas en el tema de Duda con consulta SELECT y WHERE en el foro de Mysql en Foros del Web. Hola amigos, tengo un problema al intentar hacer una instrucción SQL private void btn_buscarActionPerformed(java.awt.event.ActionEve nt evt) { // BUSCAR String patron; patron = "SELECT profesor.id," ...
  #1 (permalink)  
Antiguo 03/11/2011, 20:48
 
Fecha de Ingreso: noviembre-2011
Mensajes: 5
Antigüedad: 12 años, 5 meses
Puntos: 0
Duda con consulta SELECT y WHERE

Hola amigos, tengo un problema al intentar hacer una instrucción SQL


private void btn_buscarActionPerformed(java.awt.event.ActionEve nt evt) {
// BUSCAR

String patron;
patron = "SELECT profesor.id,"
+ "profesor.apellidopaterno,"
+ "profesor.apellidomaterno,"
+ "profesor.nombre,"
+ "escolaridad.descripcion, "
+ "seccion.nombreescuela "
+ "FROM profesor, escolaridad, seccion "
+ "WHERE profesor.id_escolaridad = escolaridad.id AND profesor.id_seccion = seccion.id AND "+
"(apellidopaterno LIKE '%"+ texto_buscar.getText() + "%' "+
//" id LIKE '%"+ texto_buscar.getText() + "%' "+
"OR apellidomaterno LIKE '%"+ texto_buscar.getText() + "%' "+
"OR nombre LIKE '%"+ texto_buscar.getText() + "%' "+
"OR descripcion LIKE '%"+ texto_buscar.getText() + "%' "+
"OR nombreescuela LIKE '%"+ texto_buscar.getText() + "%') "
+ "ORDER BY profesor.id,"
+ "profesor.apellidopaterno,"
+ "profesor.apellidomaterno,"
+ "profesor.nombre";


Si observan bien, la línea //"(id LIKE '%"+ texto_buscar.getText() + "%' "+ está como comentario porque si lo habilito (borro diagonales) me marca error, pero yo quiero que al darle clic al botón buscar, también me busque por id (sólo de la tabla profesor) ya que todos los demás campos funcionan bien al buscar.
  #2 (permalink)  
Antiguo 04/11/2011, 08:12
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Duda con consulta SELECT y WHERE

...
"(apellidopaterno LIKE '%"+ texto_buscar.getText() + "%' "+
//" id LIKE '%"+ texto_buscar.getText() + "%' "+
...

Falta una AND o un OR....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 04/11/2011, 21:58
 
Fecha de Ingreso: noviembre-2011
Mensajes: 5
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Duda con consulta SELECT y WHERE

Hola, muchas gracias por responder.

Ya lo hice y aún así me marca un error, yo pienso que es por causa del id, que no está bien referenciado o algo así.

Porque está "profesor.id" "escolaridad.id" "seccion.id" y tal vez no estoy especificando bien a qué Id me refiereo.

Espero y me puedan auxiliar
  #4 (permalink)  
Antiguo 04/11/2011, 22:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Duda con consulta SELECT y WHERE

Lo mejor es separar la sentencia y revisarla sólo con el SQL:
Código MySQL:
Ver original
  1.     profesor.id,
  2.     profesor.apellidopaterno,
  3.     profesor.apellidomaterno,
  4.     profesor.nombre,
  5.     escolaridad.descripcion,
  6.     seccion.nombreescuela
  7.     profesor, escolaridad, seccion
  8.     profesor.id_escolaridad = escolaridad.id
  9.     AND
  10.     profesor.id_seccion = seccion.id
  11.     AND
  12.     (apellidopaterno LIKE '%textoABuscar%'
  13.     OR id LIKE '%textoABuscar%'  
  14.     OR apellidomaterno LIKE '%textoABuscar%'
  15.     OR nombre LIKE '%textoABuscar%'  
  16.     OR descripcion LIKE '%textoABuscar%'
  17.     OR nombreescuela LIKE '%textoABuscar%')
  18.     profesor.id,
  19.     profesor.apellidopaterno,
  20.     profesor.apellidomaterno,
  21.     profesor.nombre
Y si: No estás definiendo de qué tabla tomará el "ID".

Tips:
- Usa alias para las tablas. Te complicarás menos con la sintaxis.
- No uses LIKE con valores numéricos, como los ID. No es buena práctica, es poco eficiente y puede generar resultados falsos. LIKE se usa con cadenas de texto, no con datos numéricos.
- Usa INNER|LEFT|RIGHT JOIN. No uses coma. En MySQL es mucho más eficiente el JOIN que la coma, a pesar de lo que los tutoriales dicen.
- Procura no usar el comodín al inicio de las búsquedas con LIKE. Eso hace que se tenga que barrer la tabla completa, lo que es una de las peores formas de consulta que existen. Antes de eso es mejor trabajar con índices FULLTEXT y con MATCH() AGAINST...

Código MySQL:
Ver original
  1.     p.id,
  2.     p.apellidopaterno,
  3.     p.apellidomaterno,
  4.     p.nombre,
  5.     e.descripcion,
  6.     s.nombreescuela
  7.     profesor p
  8.     INNER JOIN escolaridad e ON p.id_escolaridad = e.id
  9.     INNER JOIN seccion s  ON p.id_seccion = s.id
  10.     (apellidopaterno LIKE '%textoABuscar%'
  11.     OR p.id  = textoABuscar  
  12.     OR apellidomaterno LIKE '%textoABuscar%'
  13.     OR nombre LIKE '%textoABuscar%'  
  14.     OR descripcion LIKE '%textoABuscar%'
  15.     OR nombreescuela LIKE '%textoABuscar%')
  16.     p.id,
  17.     p.apellidopaterno,
  18.     p.apellidomaterno,
  19.     p.nombre
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 05/11/2011, 15:56
 
Fecha de Ingreso: noviembre-2011
Mensajes: 5
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Duda con consulta SELECT y WHERE

Muchas gracias "quimfv" y "gnzsoloyo" me ayudaron a resolver mi problema, especialmente eso del alias fue muy provechoso.

Gracias de verdad

Etiquetas: select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:15.