Foros del Web » Programando para Internet » PHP »

Dudas en una consulta

Estas en el tema de Dudas en una consulta en el foro de PHP en Foros del Web. Hola, tengo una consulta de SQL que no termina de darme los resultados deseados, a ver si me podeís hechar una mano para que esto ...
  #1 (permalink)  
Antiguo 08/09/2006, 02:12
Avatar de kennyhp  
Fecha de Ingreso: julio-2006
Mensajes: 370
Antigüedad: 17 años, 9 meses
Puntos: 5
Dudas en una consulta

Hola,
tengo una consulta de SQL que no termina de darme los resultados deseados, a ver si me podeís hechar una mano para que esto funcione

Imaginad que tengo en la base de datos en la tabla articulos dos registros:

Dani
Dani Cordoba

Lo tengo montado para que si la busqueda solo da un resultado lo muestra directo, si da mas de un resultado muestra el listado de resultados y si no da resultado da la posibilidad de insertar el termino.
En el ejemplo de ahora si pongo dani, me aparecen los dos terminos y si pongo dani cordoba me aparece directo la descripcion para dani cordoba, hasta aquí todo perfecto es justo lo que quiero.
El problema que tengo es que ahora si pongo como parametro de busqueda cordoba me muestra el resultado de Dani Cordoba directo. Me gustaria que diese la opción de añadir cordoba a la base de datos y que ademas me dijese algo asi como resultados relacionados: Dani cordoba
... no se si me he explicado del todo bien, podeis ver funcionando el ejemplo de lo que quiero en www.edificacionesglobal.com/dani/anait/wiki
Si en la busqueda no poneis nada salen todos los articulos insertados y podeis ver el funcionamiento que os explico. (para poder insertar y editar, por si quereis probarlo para verlo teneis que ir a www.edificacionesglobal.com/dani/anait/foro y loguearos con user: prueba pass: prueba )

El código que tengo para las busquedas es:

Código PHP:
$palabra=isset($_POST['palabra'])? trim ($_POST['palabra']): $_GET['palabra'];

    if (
$HTTP_SERVER_VARS[REQUEST_METHOD] == "POST"//compruebo de dd llega la variable

    
$res=mysql_query("SELECT * FROM wiki WHERE titulo LIKE '%".$palabra."%'"); 

    else
    {
    
$res=mysql_query("SELECT * FROM wiki WHERE titulo='$palabra'");
    }
    
//esto muestra los resultados

    
if (mysql_num_rows($res)>0)
    {
       
$num_res=mysql_num_rows($res);
       if (
$num_res==1)
       {
             while (
$row mysql_fetch_array($res))
          {
          if(!
$pun_user['is_guest'])
          {
          
$titulo=$row['titulo'];
          echo 
"<a href=\"portada.php?accion=editar&termino=$titulo\">Editar</a><br>";
          }
          else
          echo 
'Para poder editar has de ser un usuario registrado<br><br>';
            
          echo 
$row['titulo'];
          echo 
"<br>";
          echo 
$row['articulo'];
          }
       }
                  else
        {
           echo 
'Se han encontrado los siguientes resultados:';
           echo 
"<br>";
           while (
$row mysql_fetch_array($res))
           {
                                 
$titulo$row[titulo];

               echo 
"<a href=\"portada.php?accion=ver&palabra=$titulo\">$titulo</a>";

               echo 
"<br>"

           }

         }
    } 

    else 
    {

      echo 
"No hay resultados para $palabra, comprueba que este bien escrito.<br>";

      if(
$pun_user['is_guest'])

      echo 
"Puedes colaborar e insertar el termino, pero para ello tienes que estar registrado y logueado";

      else

      echo 
"Si lo deseas puedes colaborar <a href=\"portada.php?accion=anadir&termino=$palabra\">insertando</a> el termino";



    } 

    } 
Un saludo,
  #2 (permalink)  
Antiguo 08/09/2006, 02:27
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 17 años, 9 meses
Puntos: 0
Deberías comparar la palabra q ha insertado el usuario con la q recoge de la base de datos. Si son completamente iguales es q hizo la busqueda de la palabra completa. En caso contrario es q la encontró parcialmente en el registro y ahí es donde puedes poner el código para q añada la palabra.

Saludos.
__________________
La muerte es un camino que todos debemos recorrer...
  #3 (permalink)  
Antiguo 08/09/2006, 02:42
 
Fecha de Ingreso: agosto-2006
Mensajes: 25
Antigüedad: 17 años, 8 meses
Puntos: 0
Hola,

imagino que tendrías que modificar el acceso a datos.

La cuestión esta en:

$res=mysql_query("SELECT * FROM wiki WHERE titulo LIKE '%".$palabra."%'");

$res=mysql_query("SELECT * FROM wiki WHERE titulo LIKE '.$palabra."%'");

podrías montar un union o algo asín. Sobre l marcha:

$res=mysql_query("SELECT *,0 FROM wiki WHERE titulo LIKE '%".$palabra."%'"
union "SELECT *,1 FROM wiki WHERE titulo LIKE '.$palabra."%'");
  #4 (permalink)  
Antiguo 08/09/2006, 04:03
Avatar de kennyhp  
Fecha de Ingreso: julio-2006
Mensajes: 370
Antigüedad: 17 años, 9 meses
Puntos: 5
Holas, djreficul, me has hecho pensar y he dado con esta solucion:

if($res_varios=mysql_query("SELECT * FROM wiki WHERE titulo LIKE '%".$palabra."%'"))
{
if($res_varios!="$palabra")
$res=mysql_query("SELECT * FROM wiki WHERE titulo='$palabra'");
else $res=$res_varios;
}

Parece que funciona bien ;) , xmistol, he intentado lo del UNION pero no ma salido.
  #5 (permalink)  
Antiguo 08/09/2006, 04:33
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 17 años, 9 meses
Puntos: 0
Jejejeje, en eso consistía mi respuesta, en q lo pensaras x tí mismo mejor q poner un código y q te aviaras xD

Saludos.
__________________
La muerte es un camino que todos debemos recorrer...
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:07.