Foros del Web » Programando para Internet » PHP »

Consulta like en mysql

Estas en el tema de Consulta like en mysql en el foro de PHP en Foros del Web. Hola, He indagado un poco por estos mundos de Internet y no he sabido encontrar la solución a mi problema, a ver si vosotros me ...
  #1 (permalink)  
Antiguo 11/08/2008, 02:54
 
Fecha de Ingreso: diciembre-2007
Ubicación: Barcelona
Mensajes: 289
Antigüedad: 16 años, 11 meses
Puntos: 8
Consulta like en mysql

Hola,

He indagado un poco por estos mundos de Internet y no he sabido encontrar la solución a mi problema, a ver si vosotros me podeis ayudar un poquillo.

Bien, pues en mi web tengo un apartado en que aparece un abecedario para buscar por letra, número y otros, los títulos de las pelícuals, algo así:

0-9 - A - B - C - D - E - ............. - Z - Otros

Mediante Ajax hago la consulta pertinente y todo va como la seda menos en el caso de seleccionar el 0-9 y el Otros. Lo que pretendo en ambos casos es que me busque todas las entradas cuyo título sean números y en el caso de "Otros" sea cualquier cosa menos numeros y letras. Os adjunto el código a ver si me podeis hechar un cable. Os aviso de que lo que he hecho puedo estar muy muy mal proque lo he hecho por probar:

Código PHP:
<?php

    $con 
mysql_connect("localhost","root","123456789");
    
    if (!
$con)
        die(
'Impossible connectar: ' mysql_error());
    
    
mysql_select_db("organizador"$con);
    
$where=array();
    
    if (!empty(
$_POST['titulo']))
    {    
        if(
$_POST['titulo'] == "0-9")
        {
            
$where[]="Titulo LIKE '{0}%' OR '{1}%' OR '{2}%' OR '{3}%' OR '{4}%' OR '{5}%' OR '{6}%' OR '{7}%' OR '{8}%' OR '{9}%'";
        }
        else
        {
            
$where[]="Titulo LIKE '{$_POST['titulo']}%'"
        }
    }
    
    
/*if ($_POST['genero'] != "Opciones...")  
        $where[]="Genero LIKE '{$_POST['genero']}%'";*/

    
if ($_POST['id_genero'] != 0)
        
$where[]="ID_Genero = {$_POST['id_genero']}";

    if (!empty(
$_POST['year']))
        
$where[]="Year = {$_POST['year']}";

    if (
0==count($where)) 
        
$cad_where=''
    else
    { 
        
$cad_where=implode(' AND ',$where); 
        
$cad_where='WHERE '.$cad_where
    }
    
    
$sql "SELECT Titulo, ID_Pelicula FROM pelis $cad_where ORDER By Titulo";

    
//echo $sql;

    
$result mysql_query($sql,$con);
    if(
mysql_num_rows($result) > 0)
    {
        while (
$registro mysql_fetch_array($result)) 
          {
              echo 
"<a href=\"#\" id=\"".$registro['ID_Pelicula']."\" class=\"resultado\" onmouseover=\"mostrarDatos(this)\">".$registro['Titulo']."</a><br>";
        }
        exit;
       }
       else
       {
          echo 
"no existe";
    }
?>
Esto está mal seguro:

Código PHP:
$where[]="Titulo LIKE '{0}%' OR '{1}%' OR '{2}%' OR '{3}%' OR '{4}%' OR '{5}%' OR '{6}%' OR '{7}%' OR '{8}%' OR '{9}%'"
Y quisiera saber como se hace esa consulta y ya que estamos como puedo hacer lo contrario, que no sean ni números ni letras. Muchas gracias de antemano!!!!
  #2 (permalink)  
Antiguo 11/08/2008, 03:08
 
Fecha de Ingreso: diciembre-2007
Ubicación: Barcelona
Mensajes: 289
Antigüedad: 16 años, 11 meses
Puntos: 8
Respuesta: Consulta like en mysql

Me respondo yo mismo en lo de obtener los que van del 0-9:

Cambiando esto:

Código PHP:
$where[]="Titulo LIKE '{0}%' OR '{1}%' OR '{2}%' OR '{3}%' OR '{4}%' OR '{5}%' OR '{6}%' OR '{7}%' OR '{8}%' OR '{9}%'"
Por esto:

Código PHP:
$where[]="Titulo REGEXP '^[0-9]'"
Y listos, pero aun no se como hacer lo de que me encuentre lo que sea menos lo que empiece por 0-9 o A-Z.

Saludos!
  #3 (permalink)  
Antiguo 11/08/2008, 03:31
Avatar de Kamae  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona (Catalunya)
Mensajes: 307
Antigüedad: 16 años, 6 meses
Puntos: 13
Respuesta: Consulta like en mysql

Buenas

No está del todo bien porque debes poner otra vez "OR campo LIKE condición OR campo (...)", y no "campo LIKE condicion OR condicion OR condicion (...)"

Es decir:
Código PHP:
$where[]="Titulo LIKE '0%' OR Titulo LIKE '1%' OR Titulo LIKE '2%' OR Titulo LIKE '3%' OR Titulo LIKE '4%' OR Titulo LIKE '5%' OR Titulo LIKE '6%' OR Titulo LIKE '7%' OR Titulo LIKE '8%' OR Titulo LIKE '9%'"
Y para que no sean números ni letras, pues puedes hacerlo manual porque total.. pensemos, cuántas películas llevan símbolos raros como primer caracter? Sólo "¿" o "¡". Pero por si acaso quieres añadir más, puedes ponerlos también. Hazlo manualmente:

Código PHP:
$where[]="Titulo LIKE '!%' 
OR Titulo LIKE '¡%' 
OR Titulo LIKE '¿%' 
OR Titulo LIKE '?%' 
OR Titulo LIKE '.%' 
OR Titulo LIKE ',%' 
OR Titulo LIKE '-%' 
OR Titulo LIKE '_%' 
OR Titulo LIKE '(%' 
OR Titulo LIKE ')%' 
OR Titulo LIKE '[%' 
OR Titulo LIKE ']%' 
OR Titulo LIKE '{%' 
OR Titulo LIKE '}%' 
OR Titulo LIKE '"
%
OR Titulo LIKE ''%'"; //Aquí va una contrabarra \ seguido de una comilla simple ', pero si lo pongo junto aquí me aparece sólo la comilla 
Yo he estado probando en un MySQL local y me ha funcionado, supongo que te tendría que ir bien.

Saludos

EDITO: Ya he visto que solucionaste lo de los números y de forma más corta :P
  #4 (permalink)  
Antiguo 11/08/2008, 06:25
 
Fecha de Ingreso: diciembre-2007
Ubicación: Barcelona
Mensajes: 289
Antigüedad: 16 años, 11 meses
Puntos: 8
Respuesta: Consulta like en mysql

Hola,

Muchas gracias por responder. Al ver tu respuesta me ha parecido un poco laboriosa aun que útil. De todas formas he encontrado otra sulución que pego aquí porsi a alguien le interesa:

Código PHP:
    if (!empty($_POST['titulo']))
    {    
        if(
$_POST['titulo'] == "0-9")
        {
            
$where[]="Titulo REGEXP '^[0-9]'";
        }
        else if(
$_POST['titulo'] == "Otros")
        {
            
$where[]="Titulo NOT REGEXP '^[0-9]' AND Titulo NOT REGEXP '^[a-z]'";
        }
        else
        {
            
$where[]="Titulo LIKE '{$_POST['titulo']}%'"
        }
    } 
Con esas 3 condiciones lo que obtengo es que según el link seleccionado (0-9, a-z o otros) hace una consulta distina.

Muchas gracias por todo!!
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 21:25.