| |||
Re: Busqueda mas rapida Cita: Gracias por responder, pero no puedo dividir las tablas, tendre que buscar otra forma.Salu2. |
| |||
Re: Busqueda mas rapida Ummmm. está bien indexada la tabla esta que dices? Creo que 10000 registros no son tantos para que tarde tanto como dices. Siempre que estemos hablando de realizar la búsqueda, si de lo que estamos hablando es de pintar en pantalla los 10000 registros ya es otra cosa. Aquí lo que tarda realmente es pintar, no recuperar. |
| |||
Re: Busqueda mas rapida Uso el MySQL, y los registros que busco los pongo en un select, me entienden? osea en un input voy escribiendo el nombre de un producto y a medida que escribo, va buscando los registros con esas palabras y los va poniendo en un select, para que luego una vez que escoja un producto, me inserte una fila en una tabla con el nombre de ese producto incluido su precio. Demora un poquito pero quisiera que la busqueda sea aun mas rapida, es que estoy haciendo un proyecto un poco grande y cuando ingreso solo yo se demora un poquito en hacer la busqueda, imaginense cuando entren 900 o 1000 usuarios a la vez. Esa es la razon por la cual quiero mejorar esa busqueda. Gracias por la ayuda. |
| |||
Re: Busqueda mas rapida Vale, entonces... entiendo que cada vez que pulsas una tecla se hace una llamada ajax para recuperar los datos que coincidan con lo que has escrito, no? Pues... me temo que si lo haces así... el problema que tienes (aparte de lo que tarde la BD en recuperar los datos y el tiempo de crear los valores en el select) es, además, el tiempo de respuesta del servidor y eso si que no lo puedes optimizar mucho. Bueno, podrías hacer que la página que retorna los datos sea lo más atómica posible, pero el tiempo de retorno de datos (por parte del servidor) lo seguiráis teniendo. Puede ser un poco bestia según el volumen de datos, pero.. has pensado en descargar a cliente los datos que te interesen (todos) y tratar ahí un vector ordenado con javascript para escribir el select. Esto eliminaría el tiempo ese que te decía antes y no es complicado de montar. Supongo que de lo que estamos hablando es de recuperar pares de id y nombre de usuario (por ejemplo, no?). Dime algo, ok? Saludos... |
| |||
Re: Busqueda mas rapida Pues lo que trato de recuperar son el Id y el nombre del producto y su precio, en un select con su propiedad size=6 , al momento de presionar una tecla me busca a todos los productos que empiezen con esa letra, pueden ser 10, 20, o 60,etc, pero se demora un poco en mostrarlos pero ese select se crea con una pagina php. Aunque he estado pensado en crear ese select usando DOM pero no se como agregarles los productos en cada <option>. Bueno una vez que me muestre la lista de los productos, al seleccionar uno, se agrega a una tabla creada con DOM se crea una fila con 5 celdas en cada celda va lo siguiente:nombre del producto,precio, un <text> para que escriban la cantidad que desean comprar, en la 4º celda el subtotal, y el la 5ª un boton para que elimine ese producto si es que no lo desea. y cada vez que escribo la cantidad el precio por la cantidad se multiplican para que se muestre el subtotal. Y tambien se va mostrando el Total a pagar, con su IGV Osea ya logre todo eso, al principo tenia problemas, pero ya solucione todos los errores, tenia que hacer varias validaciones pero las pude hacer todas. Solo me falta eso de que la busqueda se haga mas rapida, y otro detalle al momento de grabar. He pensado en la paginacion ya que al momento de busca se usa el LIMIT para mostrar solo unos cuantos, pero como no es una pagina en donde voy a mostrar los resultados sino un select, pues..., pero espero lograrlo. Salu2. |
| ||||
Re: Busqueda mas rapida Se me ocurre una posible solución, aunque tratándose de PHP requiere un pequeño esfuerzo de programación: podrías usar una estructura árbol para almacenar el resultado de tu búsqueda. Me explico: según lo que he entendido, cuando un usuario pulsa una tecla, realizas una búsqueda en la base de datos de todos los productos que empiezan por esa letra. Lo más lógico es que la siguiente acción del usuario no sea borrar la primera letra que ha escrito y por tanto la nueva búsqueda en la base de datos te dará productos que ya encontraste en la primera búsqueda. Deberías organizar los datos de la primera búsqueda en un árbol de búsqueda de forma que conforme el usuario va escribiendo el nombre del producto, puedas encontrar todos aquellos que empiezan por esas letras y que ya buscastes la primera vez. Para ello deberías usar variables de sesión para no perder los resultados de esa primera búsqueda. Solo debes buscar de nuevo en el caso de que el usuario cambie la primera letra. Usando árboles obtendrás respuestas muy rápidas si los datos están bien organizados. Si no te merece la pena construirte los árboles en PHP, puedes simplemente hacer búsquedas simples en arrays aprovechando que el resultado de la consulta a la base de datos te dará los datos ordenados. Un Saludo |
| ||||
Re: Busqueda mas rapida Tendrás que usar variables de sesión para almacenar los datos de la primera búsqueda. La forma sencilla es que almacenes el resultado de la primera búsqueda en la base de datos en un array de sesión. En ese array tendremos por tanto después de la consulta a la base de datos, todos los productos que empiezan por una determinada letra, por ejemplo la 'a'. Cuando el usuario pulsa otra tecla, por ejemplo la 'b', ya no extraes los datos de la base de datos, sino que recorres el array anterior quedándote con aquellos productos que empiezan por 'ab'. Muy resumido: Código PHP: |
| |||
Re: Busqueda mas rapida Gracias por la ayuda. Ya lo logre,y lo busca con mas rapidez pero a partir de la segunda busqueda pero el problema es que necesito que a la primera busqueda lo haga con rapidez, a la primera se demora algo de 7 segundos. Es que como dijeron no se demora en encontrarlos, si no en mostrarlos, Código PHP: aunque se me ha ocurrido enviar el array $items(la linea que esta comentada) a Javascript,y alli crear el <select> con los <option> y con los valores del array. Si creo los los objetos <select> y <option> con Javascript supongo que sera mas rapido, Se podra hacer? Yo puedo enviar variables de Javascript a PHP por medio del Ajax, pero al reves no lo se, y tambien el archivo en el que esta el select se llama bus.php, mientras que en el archivo nota_pedido.php hay una etiquerta DIV y alli pongo en el select, me entienden? Tambien se ha ocurrido otra solucion la cual seria en la consulta ponerle un LIMIT 0,30 por ejemplo, para que solo me muestre 30 registros, luego si sigo bajando con la barra del desplazamiento del <select> que me busque los demas producto a partir de la posicion 31 Se podra hacer? Si saben como ayudarme me avisan, porque yo seguire intentandolo. pd: la razon por la cual concateno el codigo, nombre y precio del producto con el Arroba es que al momento de seleccionar un producto, llamo a una funcion de Javascript esa funcion hace un split el cual los separa y en una nueva fila de una tabla me muestra el nombre con su precio. Salu2 Última edición por StrikeFreedom; 14/02/2007 a las 15:20 |
| ||||
Re: Busqueda mas rapida Buenas, si consultas cualquier guía de estilo de desarrollo de interfaces gráficas encontrarás que poner más de 9 opciones en un select se considera una mala decisión de diseño de la interfaz. Si el usuario pulsa una tecla y ve que cambia algo (en este caso el select) lo más común es que vaya a consultar en ese momento el select y al ver 527 productos te aseguro que no buscará el que quiere y suerte tendrás sino cierra la página. Creo que como bien dices debes usar un límite. El problema es que si limitas a 30 productos tu búsqueda es muy probable que el buscado no se encuentre en los primeros 30. Imagina por ejemplo que el que busca sea por casualidad de los últimos que encontrarías en la base de datos. Obligarias al usuario a bajar la barra de desplazamiento del select muchísimas veces y además ese es un comportamiento no muy común, que el usuario es posible que no se espere o que necesite aprenderlo. Lo que yo haría sería o bien no mostrar los productos en el select hasta que el usuario no haya escrito un número de letras tal que el número de productos que empiezan por ella sea razonable (y razonable para mi no son mas de 20), o bien organizas la base de datos de otra manera. Supongo que no todos los productos serán de la misma categoría. Podrás agruparlos por algún criterio, que despues podrías usar para filtrar la búsqueda. Si te fijas en la mayoría de los portales de venta se hace así. Un Saludo |
| |||
Re: Busqueda mas rapida Cita: Es que esa parte esta solo hecho para clientes de una empresa, no es para todos, solo se puede ingresar con password, para que los clientes hagan su pedido de los productos que normalmente le compran a la empresa, pero a medida que escribe el nombre del producto va disminuyendo los elementos del select (option), van quedando menos. Por ejemplo cuando escriben la letra "e" muestra 527, cuando escribe "es" van quedando 300, y asi van disminuyendo.Creo que como bien dices debes usar un límite. El problema es que si limitas a 30 productos tu búsqueda es muy probable que el buscado no se encuentre en los primeros 30. Imagina por ejemplo que el que busca sea por casualidad de los últimos que encontrarías en la base de datos. Obligarias al usuario a bajar la barra de desplazamiento del select muchísimas veces y además ese es un comportamiento no muy común, que el usuario es posible que no se espere o que necesite aprenderlo. Lo unico que quiero es que a la primera que vez que busque no se demore tanto. Cita: .Supongo que no todos los productos serán de la misma categoría. Podrás agruparlos por algún criterio, que despues podrías usar para filtrar la búsqueda. Si te fijas en la mayoría de los portales de venta se hace así Exacto, eso es lo que tenia planeado hacer, pero el ingenierio me pidio que haga la busqueda de esa manera ya que es algo muy poco visto y para salir de lo comun; bueno eso fue lo que me dijo. Pero voy a volver a decirle que cambie de opinion, espero que esta vez me haga caso. Aunque si no quiere, tendre que seguir intentando. Salu2. Última edición por StrikeFreedom; 15/02/2007 a las 09:57 |
| |||
Respuesta: Busqueda mas rapida Pues para empezar deberías colocar que a la primera letra no busque coincidencias ya que por una letra las coincidencias son muy grandes como tu dices y no tendra entre los primeros lo que busca casi nunca, a partir de la segunda busque las coincidencias usando limit yo recomiendo 10 para que se vea mejor el diseño.
__________________ <?php echo "No te metas a lo hondo del Mar si no sabes nadar, primero aprende a nadar" ?> ...Error en linea: 1 o.O |