Foros del Web » Programando para Internet » PHP »

Usar variables para select en consulta | Mod Rewrite

Estas en el tema de Usar variables para select en consulta | Mod Rewrite en el foro de PHP en Foros del Web. Buenas Simplemente es una duda que me surge al hacer mis aplicaciones web y que nunca me ha quedado del todo claro. Antes por ejemplo ...
  #1 (permalink)  
Antiguo 10/05/2008, 09:15
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
De acuerdo Usar variables para select en consulta | Mod Rewrite

Buenas

Simplemente es una duda que me surge al hacer mis aplicaciones web y que nunca me ha quedado del todo claro.

Antes por ejemplo para mostrar una noticia la URL que la contenía era algo así:

www.miweb.com/?idNoticia=4

La cuestión, es que ahora no uso el idNoticia sino el titulo, para una mejor indexación en buscadores y demás. (no lo hago con Mod Rewrite, pero la duda sería la misma que si usara Mod Rewrite)

Es decir, uso algo así:
www.miweb.com/?noticia=pepe-va-al-campo

Bien, pues igual que hacen las páginas que usan mod rewrite, me preguntaba cómo obtienen luego la noticia de la base de datos.
¿Buscan la noticia por su titulo en lugar de por su Id?
¿No es siempre más aconsejable buscarla por su id para realizar muchas menos comparaciones y obtener el resultado mucho antes?

En definitiva, que me gustaría saber como hacen las webs que usan Mod Rewrite para obtener las noticias, artículos o lo que sea mediante un título.

Gracias.
  #2 (permalink)  
Antiguo 10/05/2008, 09:54
 
Fecha de Ingreso: noviembre-2002
Mensajes: 746
Antigüedad: 21 años, 5 meses
Puntos: 6
Re: Usar variables para select en consulta | Mod Rewrite

Cita:
Iniciado por IMAC/ Ver Mensaje
Buenas

Simplemente es una duda que me surge al hacer mis aplicaciones web y que nunca me ha quedado del todo claro.

Antes por ejemplo para mostrar una noticia la URL que la contenía era algo así:

www.miweb.com/?idNoticia=4

La cuestión, es que ahora no uso el idNoticia sino el titulo, para una mejor indexación en buscadores y demás. (no lo hago con Mod Rewrite, pero la duda sería la misma que si usara Mod Rewrite)

Es decir, uso algo así:
www.miweb.com/?noticia=pepe-va-al-campo

Bien, pues igual que hacen las páginas que usan mod rewrite, me preguntaba cómo obtienen luego la noticia de la base de datos.
¿Buscan la noticia por su titulo en lugar de por su Id?
¿No es siempre más aconsejable buscarla por su id para realizar muchas menos comparaciones y obtener el resultado mucho antes?

En definitiva, que me gustaría saber como hacen las webs que usan Mod Rewrite para obtener las noticias, artículos o lo que sea mediante un título.

Gracias.
lo mas seguro es que lo que vieste fue
www.miweb.com/pepe-va-al-campo_1523.loqsea

lo que necesitan es el numerito, que es el id de la noticia, el resto del texto antes es irrelevante para hacer aparecer la noticia.
  #3 (permalink)  
Antiguo 10/05/2008, 11:31
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Usar variables para select en consulta | Mod Rewrite

Cita:
Iniciado por suntus Ver Mensaje
lo mas seguro es que lo que vieste fue
www.miweb.com/pepe-va-al-campo_1523.loqsea

lo que necesitan es el numerito, que es el id de la noticia, el resto del texto antes es irrelevante para hacer aparecer la noticia.
No, por ejemplo:
http://tufuncion.com/primer-lenguaje
http://tufuncion.com/demoscene

O bien:
"http://www.applesfera.com/2008/05/09-cover-stream-actualizado-a-la-version-20"
"http://www.applesfera.com/2008/05/09-earthbrowser-informacion-de-la-tierra-en-tu-mac"

Sin numeros por medio.
  #4 (permalink)  
Antiguo 10/05/2008, 11:32
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Usar variables para select en consulta | Mod Rewrite

vaya, este mensaje sobra...
  #5 (permalink)  
Antiguo 10/05/2008, 11:40
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Re: Usar variables para select en consulta | Mod Rewrite

claro, o la fecha... o el titulo, sin el ID de a we.... bueno, pus solo intenta usar una funcion como normalize() al comparar tus declaraciones WHERE....

en realidad creo, reemplaza todo lo que no sea [a-z0-9_-] con un guion bajo...

Código PHP:
function normalize($cadena)
{
  return 
preg_replace('/[^a-z0-9_-]*/i''-'$cadena);

  #6 (permalink)  
Antiguo 10/05/2008, 11:57
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Usar variables para select en consulta | Mod Rewrite

Cita:
Iniciado por pateketrueke Ver Mensaje
claro, o la fecha... o el titulo, sin el ID de a we.... bueno, pus solo intenta usar una funcion como normalize() al comparar tus declaraciones WHERE....

en realidad creo, reemplaza todo lo que no sea [a-z0-9_-] con un guion bajo...
Si, pero de este modo realizamos la busqueda en la base de datos por el título, que no es lo más recomendado, ¿no?
  #7 (permalink)  
Antiguo 10/05/2008, 12:08
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Re: Usar variables para select en consulta | Mod Rewrite

NO se si sea o no recomendado, yo no lo recomiendo... pero, igual puede funcionar... mientras no haya titulo iguales (obvio) pero si se puede....

independientemente si usamos, LIKE %El titulo original% nose si busque las tres palabras, pero igualmente... no encuentro una funcion regresiva de titulos-normalizados-jeje asi que una comparacion de este estilo NO se podria hacer, weno... yo no, al menos

entonces... si, no veo que se pueda hacer en base al titulo... a menos, que tengas otra mini tabla con los nombres ya normalizados y sus referencias ID originales... asi solo buscas por el titulo tal cual aparece y bingo! me explico....?
  #8 (permalink)  
Antiguo 10/05/2008, 12:41
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Usar variables para select en consulta | Mod Rewrite

Cita:
Iniciado por pateketrueke Ver Mensaje
NO se si sea o no recomendado, yo no lo recomiendo... pero, igual puede funcionar... mientras no haya titulo iguales (obvio) pero si se puede....

independientemente si usamos, LIKE %El titulo original% nose si busque las tres palabras, pero igualmente... no encuentro una funcion regresiva de titulos-normalizados-jeje asi que una comparacion de este estilo NO se podria hacer, weno... yo no, al menos

entonces... si, no veo que se pueda hacer en base al titulo... a menos, que tengas otra mini tabla con los nombres ya normalizados y sus referencias ID originales... asi solo buscas por el titulo tal cual aparece y bingo! me explico....?
Uso una función php que me quita los guiones y tal para dejarmelo tal y como está insertado en la base de datos.
Y no uso LIKE uso =, titulo='mi titulo'.

El problema es que realiza muchas compraciones si buscas por una cadena y no por un numero (ID) que sería lo normal.
Por eso me preguntaba como lo hacen las grandes páginas donde en la URL no hay id alguno, solamente texto.
  #9 (permalink)  
Antiguo 10/05/2008, 13:11
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Re: Usar variables para select en consulta | Mod Rewrite

si... tienes razon, tambien por eso esta diseñado el ID o KEY de la base de datos, cosa que agiliza la busqueda.... ahora, buena pregunta seria.... ves como lo hacen los Wikis

wikipedia.org/wiki/Un_ejemplo_raro (o algo asi)

si te das cuenta, esta es una gran web... y a realmente seria interesante como realiza sus consultas a traves de simple cadenas de texto... en la URL ... es algo sorprendente
  #10 (permalink)  
Antiguo 10/05/2008, 17:00
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Usar variables para select en consulta | Mod Rewrite

No solo wikipedia, sino muchas otras páginas.
Por eso preguntaba...
  #11 (permalink)  
Antiguo 11/05/2008, 07:21
 
Fecha de Ingreso: noviembre-2002
Mensajes: 746
Antigüedad: 21 años, 5 meses
Puntos: 6
Re: Usar variables para select en consulta | Mod Rewrite

Cita:
Iniciado por pateketrueke Ver Mensaje
si... tienes razon, tambien por eso esta diseñado el ID o KEY de la base de datos, cosa que agiliza la busqueda.... ahora, buena pregunta seria.... ves como lo hacen los Wikis

wikipedia.org/wiki/Un_ejemplo_raro (o algo asi)

si te das cuenta, esta es una gran web... y a realmente seria interesante como realiza sus consultas a traves de simple cadenas de texto... en la URL ... es algo sorprendente
pues no se de que te estrañas, ya se a dicho que puedes usar lo que quieras para tus busquedas, el id el titulo la fecha etc..

en la Wiki no veo el problema! cuando encuentres una "palabra" que sea descrita varias veces dimelo.
si alguien escribe un articulo sobre "Un_ejemplo_raro", ya no podras escribir otro sobre el, solo modificarlo. ¿cual es el problema?

lo que esta claro es que si de noticas hablamos, no es raro que al cabo del tiempo puedas repetir titulos, por eso TODAS las web de noticias que conozco usan en la url titulo + id.
  #12 (permalink)  
Antiguo 11/05/2008, 14:57
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
De acuerdo Re: Usar variables para select en consulta | Mod Rewrite

Cita:
Iniciado por suntus Ver Mensaje
pues no se de que te estrañas, ya se a dicho que puedes usar lo que quieras para tus busquedas, el id el titulo la fecha etc..

en la Wiki no veo el problema! cuando encuentres una "palabra" que sea descrita varias veces dimelo.
si alguien escribe un articulo sobre "Un_ejemplo_raro", ya no podras escribir otro sobre el, solo modificarlo. ¿cual es el problema?

lo que esta claro es que si de noticas hablamos, no es raro que al cabo del tiempo puedas repetir titulos, por eso TODAS las web de noticias que conozco usan en la url titulo + id.
El problema está en que una busqueda por una cadena genera muchas comparaciones en la base de datos y el tiempo de respuesta es más lento.

Mi pregunta es si lo hacen buscando la cadena o de algún otro modo y si buscar por cadena al fin y al cabo no se nota mucho a la hora de cargar la página.
  #13 (permalink)  
Antiguo 11/05/2008, 23:37
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Re: Usar variables para select en consulta | Mod Rewrite

OBVIAMENTE... no se SQL, pero... solo genera grandes y costosas consultas, SI NO sabes como consultar... si usas un LIKE es seguro que tardara mas.... y mucho mas si buscas a traves del campo "contenido" (o algo asi) pero, el campo... "titulo" no debe ser extenso... entonces ya dicho ¿cual es el problema?

ya ke no es los mismo un LIKE que un WHERE... ojo!
  #14 (permalink)  
Antiguo 12/05/2008, 01:56
 
Fecha de Ingreso: septiembre-2005
Mensajes: 840
Antigüedad: 18 años, 7 meses
Puntos: 84
Re: Usar variables para select en consulta | Mod Rewrite

Yo puedo responder a lo de SQL ;) ;)


La cuestion es a la hora de diseñar las tablas, cuando se marca si va a tardar despues la consulta o no, me expliko :

Cuando tu creas una Tabla, por ejemplo:

Mesas: idMesa,NumeroAsientos,Posicion,nombreMesa

Tu decides que index le quieres poner, normalmente solo le ponemos un index, y suele ser al que se va a quedar de forma unica, es decir, en esta tabla, solo le pondriamos un index a idMesa ( del tipo unique y autoincrement seguramente ).


Al crearle el index, SQL automaticamente genera un archivo mas aparte del archivo de SQL, ordenando por el indice indicado, es decir, q cada vez que añadieramos una mesa, se actualizaria este ultimo archivo con los datos ya ordenados.

Entonces, cuando nosotros hacemos una consulta a SQL, esta usa el archivo con los datos ordenados, y tarda menos en encontrarlo.

Pero que pasa cuando ese archivo no existe? este caso se da cuando hacemos una busqueda por un campo que no esta indexado.

En este caso, SQL genera un archivo temporal en el que ordena la tabla por este indice, y luego sobre ese archivo temporal, hace la busqueda.

Entonces, la solucion ideal para esto es, que a la hora de hacer tu base de datos, siempre dejes indexado los campos por los que vas a hacer la busqueda.

En El caso de Noticias, Dejariamos indexados el ID y el Titulo, que son los mas comunes, no solo el ID

;)
  #15 (permalink)  
Antiguo 12/05/2008, 01:59
 
Fecha de Ingreso: septiembre-2005
Mensajes: 840
Antigüedad: 18 años, 7 meses
Puntos: 84
Re: Usar variables para select en consulta | Mod Rewrite

Código PHP:

ya ke no es los mismo un LIKE que un WHERE
... ojo

Ahi creo que te has confundido de terminos o algo, es cierto que no son lo mismo, pero esa comparacion que haces es sin sentido xD

El Where es una clausa que indica por que comparar, siempre que haya una comparacion, y el like no se puede usar separado del where en ningun momento, es decir, para meter un Like tienes q poner el Where :

Código PHP:

Where titulo like 
%HOLA
El where es obligado siempre que vayas a especificar alguna comparacion, pero no es ninguna funcion de comparar, es solo lenguaje de SQL
  #16 (permalink)  
Antiguo 12/05/2008, 02:09
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
De acuerdo Re: Usar variables para select en consulta | Mod Rewrite

Muchas gracias por la respuesta miSko ;)

Tengo el id como clave primaria y lo incremento yo mismo.
Ya se que esto ya no entra dentro del php, publiqué un tema también en "Bases de datos" pero no ha habido respuestas al respecto, de modo que prosigo :)

¿Cómo indexo el titulo de la noticia también?
¿Haciéndolo también clave primaria? ¿haciendolo un "indice"?
Por cierto, en mi sistema no habrá 2 noticias con un mismo título.

Si lo he entendido bien, haciendo un indice al título de la noticia, SQL (en mi caso MySql con PhpMyAdmin) crearía una lista ordenada por el título, ¿no?

De modo que claro, al realizar la busquedad de "pepe" por ejemplo, no tiene más que irse a las que empizan por "p" descartando así todas las anteriores y reduciendo su área de búsqueda enormemente.

Gracias de nuevo.

PD: uso un "where titulo='pepe dice hola' " Un like no tendría mucho sentido para realizar la busqueda de una cadena conocida.
  #17 (permalink)  
Antiguo 12/05/2008, 02:26
 
Fecha de Ingreso: septiembre-2005
Mensajes: 840
Antigüedad: 18 años, 7 meses
Puntos: 84
Re: Usar variables para select en consulta | Mod Rewrite

Si no vas a tener 2 titulos iguales, crearias un index Unico tambien a titulo, si no, sol un index normal.


Si a la hora de buscar por titulo, vas a buscar por titulos EXACTOS, es decir, que si no coincide toda la cadena, no te devuelva nada, el like creo q no es necesario.

el Like yo lo uso para obtener muxos registros con algo determinado, es decir si por ejemplo

Nombres
------------
Pepe
Pepa
Pepito
Pinoso
Piolin

Where Nombres like '%pe%'

Obtendria Pepe, Pepa y Pepito.


De todas formas lo estoy haciendo asi al vuelo, no me acuerdo muy bien del like, pk casi siempre uso el = y siempre busco cosas enteras, no partes.

:]
  #18 (permalink)  
Antiguo 12/05/2008, 04:27
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Usar variables para select en consulta | Mod Rewrite

Pero quiero decir, en la base de datos como hago que el titulo lo trate como index.

¿Dandole al botón que dice "indice" ?
  #19 (permalink)  
Antiguo 12/05/2008, 04:29
 
Fecha de Ingreso: septiembre-2005
Mensajes: 840
Antigüedad: 18 años, 7 meses
Puntos: 84
Re: Usar variables para select en consulta | Mod Rewrite

Claro, Si tienes el PHP my Admin, puedes darle a crear index por esa columna xD
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 20:03.