Ver Mensaje Individual
  #3 (permalink)  
Antiguo 05/02/2017, 02:23
maurikius1983
Usuario no validado
 
Fecha de Ingreso: abril-2012
Mensajes: 134
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Buscador Java

Ante todo gracias por la respuesta, pero creo que no me he explicado bien, lo pongo esquematizado:

- TABLA PRODUCTOS: almaceno el ID de las MARCAS y CATEGORÍAS (He quitado el código de CATEGORÍAS para que no sea tan denso en el post ya que es igual que MARCAS pero en su tabla correspondiente).

- En teoría el tabla de la aplicación se tendría que mostrar el ID numérico de las MARCAS, pero para que le sea mas fácil a los usuarios, lo convierto en texto con un método que recupera los nombres a través de los id.

Como ejemplo cojo el ID de los PRODUCTOS, podría ser otro campo excepto MARCAS y CATEGORÍAS, cojo el texto introducido y lo busco con este método, donde campo es la columna donde buscar y valor el texto introducido
Código:
if (rbBuscarProductoPorId.isSelected()) {
   campo = "producto_id";
   listaProducto = pd.buscarProductoPorSeleccion(campo, valor);

}
- Ya tenemos en la tabla los nombres de las MARCAS en la tabla producto de la aplicación, ahora cada vez que escribimos una letra realiza el proceso de búsqueda.

- Aquí viene el "problema", que la búsqueda en la tabla PRODUCTOS tiene que ser por valores numéricos para que sea rápida y no afecte al rendimiento, pero eso es para mi como programador, el usuario lo que ve son NOMBRES, entonces lo que hago es que cada letra que escribe consulto en la tabla CATEGORÍA los ID que tienen como nombre esa letra (LIKE) y posteriormente hago el proceso de pasar los ID a la consulta de búsqueda en la tabla PRODUCTOS.

Para el caso de la búsqueda de MARCAS no me vale el código anterior por lo que explico, este es el código:

Código:
if (rbBuscarProductoPorMarca.isSelected()) {

   // Con este metodo busco los ID que contengan el valor que escribe (letra a letra)
   MarcaDAO md = new MarcaDAOImpl();
   listaIdMarcas = md.buscarIdMarcaPorNombre(valor);

  // Recorro los id que obtengo del texto introducido y busco los productos
  for (int i = 0; i < listaIdMarcas.size(); i++) {
      listaProducto.addAll(pd.buscarProductoPorMarca(listaIdMarcas.get(i)));
   }
}
Como veis, este proceso es más lento, ya que cada letra que escribe, instancia una clase, recorreo un bucle y realiza dos consultas a las BBDD.


- Entonces os pregunto si hay alguna alternativa que sea menos pesada u otra forma de realizar la búsqueda.

- La opción mas fácil, pero menos agradable para el usuario, es dejar el código de las categorías y las marcas, y cuando vaya a buscar por ellos consulte el código de la categoría en el apartado "Categorías" (caso menos común, ya que lo normales por nombre de producto o código).

Espero haber sido claro y me hayáis entendido.