Foros del Web » Programando para Internet » PHP »

Ayuda con consulta

Estas en el tema de Ayuda con consulta en el foro de PHP en Foros del Web. Hola maestros: tengo un pequeño problema tengo que hacer una busqueda desde php pero no me sale: el tipode busqueda es el siguiente quiero consultar ...
  #1 (permalink)  
Antiguo 22/05/2003, 09:34
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 21 años, 5 meses
Puntos: 1
Ayuda con consulta

Hola maestros:

tengo un pequeño problema tengo que hacer una busqueda desde php pero no me sale:

el tipode busqueda es el siguiente quiero consultar la palabra women pero esto implica que debo encontrar los siguientes resultados:

Women
Women's
women
women's

el codigo que utilizo es el siguiente:

Código PHP:
<?php

  
if(!isset($buscar)){ 
    echo 
"<p>Debe especificar una cadena a buscar</p>\n";
    echo 
"<p><a href=buscado.htm>Volver</a></p>\n";
    exit;
    }
  

  
$link=mysql_connect("localhost","root","omar");
  
mysql_select_db("Datospag",$link);

  
$sql="SELECT * FROM journals where title LIKE \"%$buscar%\"";  //aqui  realizo la consulta sin hacer ningun filtro
  
$result mysql_query($sql$link);

  while (
$row mysql_fetch_array($result)) {
    
$resultado $row["title"];
    
$pos strpos($resultado,$buscar)+strlen($buscar);
          if(
$pos==(strlen($resultado)-1) || (substr($resultado,$pos1) == "'") || (substr($resultado$pos1) == " "))  //aqui es donde hago el filtro
      
{
        echo 
$row["title"]."<BR> \n";
      }

   }
?>
el problema es que salen solo algunos por ejemplo

si intruduzco en la caja de texto women no me saca los que inicien con la primera letra mayuscula por decir Women o Women's
no se en donde este mal.

no se si me haya explicado bien.



ya vi bien creo que es por el $pos no me da bien la posicion haber si me ayudan tengo un palabra digamos:

Year Book of Obstetrics] Gynecology] and Womens Health

quiero obtener la posicion hasta donde se encuentra la n de womens

como lo puedo hacer.

lo tengo asi:

Código PHP:
$resultado $row["title"];
 
$pos strpos($resultado,$buscar)+strlen($buscar); 

siempre debo de localizar la posicion de la n

Women in Management Review
Women's health weekly
WIN Women's International Network News
Texas Journal of Women and the Law

etc...

espero me puedan ayudar.

Última edición por payo22; 22/05/2003 a las 09:06
  #2 (permalink)  
Antiguo 22/05/2003, 09:37
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

En principio el manual de MySQL dice que LIKE es case-insensitive (le dan igual las mayusculas o las minusculas). Pero como ello puede depender de la configuracion, la solucion seria pasar a mayusculas $buscar con la funcion PHP strtoupper() y hacer el like con ese valor y el resultado de usar la funcion MySQL UCASE(). Algo asi:

UCASE(title) LIKE '%".strtoupper($buscar)."%'";

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 22/05/2003, 09:41
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 21 años, 5 meses
Puntos: 1
pero el problema no es con el Like.

es con el localizar la posicion.

gracias por todo.
  #4 (permalink)  
Antiguo 22/05/2003, 09:54
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Perdon, pero es que has editado el mensaje despues de que le diera a responder.

El problema parece ser que strpos() es case-sensitive. En el manual aparece la funcion stripos(), que se supone que es case-insensitive, pero pone que esta solo en la version CVS ( no en la estables ). Pero podrias usar strpos() pasandole como argumentos el strtoupper() de los dos textos:
Código PHP:
$pos=strpos(strtoupper($resultado),strtoupper($buscar)); 
Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 22/05/2003, 09:56
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 21 años, 5 meses
Puntos: 1
Perdon creo que me he explicado mal.

Lo que quiero es obtener la posicion de cada una de las letras n de la palabras women por dedir:

Women in Management Review
Women's health weekly
WIN Women's International Network News
Texas Journal of Women and the Law
  #6 (permalink)  
Antiguo 22/05/2003, 10:07
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Vale, pero lo que te he puesto deberia darte la posicion de la primera letra de la palabra a buscar. Y creo que desde ahi es facil localizar la posicion de la ultima letra de la palabra a buscar. Es mas, tu mismo has reconocido que tu script funciona perfectamente cuando las letras de la cadena a buscar estan igual que en la cadena donde buscas (me refiero a mayusculas/minusculas). Usando strtoupper(), lo que haces es pasar ambas cadenas a mayusculas, con lo cual strpos() localiza sin problemas la cadena a buscar. El mayor problema que puedes tener es con los acentos y con las ñ y caracteres raros de esos, que strtoupper() no pasa a mayusculas.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 22/05/2003, 10:49
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 21 años, 5 meses
Puntos: 1
Condiciones

es cierto Mestro Josemi ya tengo las posiciones

pero ahora como comparo esto:

digamos que ya tengo la posicion de la n en la cadena women como hago una comparacion para ver si el caracter que le sigue a la n es un ' un espacio en blanco o un salto de Linea

el codigo qe tengo es el siguiente:

Código PHP:
while ($row mysql_fetch_array($result)) {
    
$resultado $row["title"];
    
    
$pos=strpos(strtoupper($resultado),strtoupper($buscar))+strlen($buscar);
    if((
substr($resultado,$pos1) == "'") || (substr($resultado$pos1) == " ")){
       echo 
$row["title"]."<BR> \n";
      }

pero esto no me funciona no se si estoy mal en mis condiciones.

como lo puedo hacer ?

gracias por todo.

ya lo unico que me falta es el salto de linea no me acepta la condicion:

Código PHP:
if((substr($resultado,$pos,1) == "&") || (substr($resultado$pos1) == " ")|| (substr($resultado$pos1) == "\n")){

  echo 
"algo";


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 12:20.