Foros del Web » Programando para Internet » PHP »

subfiltrar resultados

Estas en el tema de subfiltrar resultados en el foro de PHP en Foros del Web. Hola. Quiero subfiltrar resultados utilizando esta subconsulta, pero me da un error que no sé reconocer tras darle vueltas y vueltas. la consulta: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 27/05/2011, 11:17
 
Fecha de Ingreso: junio-2008
Mensajes: 291
Antigüedad: 15 años, 10 meses
Puntos: 9
subfiltrar resultados

Hola. Quiero subfiltrar resultados utilizando esta subconsulta, pero me da un error que no sé reconocer tras darle vueltas y vueltas.

la consulta:

Código PHP:
Ver original
  1. $_pagi_sql = "SELECT * FROM libros WHERE titulo LIKE '%$subtitulo%' IN (SELECT * FROM libros $_pagi_sql) ORDER BY  titulo ASC";}

el error:

Código PHP:
Ver original
  1. Error en la consulta de conteo de registros: SELECT COUNT(*) FROM libros WHERE autor LIKE '%barral%') ORDER BY titulo ASC. Mysql dijo: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY titulo ASC' at line 1
  #2 (permalink)  
Antiguo 27/05/2011, 11:27
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 13 años, 6 meses
Puntos: 511
Respuesta: subfiltrar resultados

Hola que tal charlyta

podrias mostrar mas codigo para ayudarte mejor

Saludos
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #3 (permalink)  
Antiguo 27/05/2011, 11:28
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: subfiltrar resultados

No entiendo que intentas hacer con esa consulta.

Estás usando la variable $_pagi_sql dentro de la consulta.
¿Qué se supone que contiene esa variable? Además la sintaxis está mal en la parte: SELECT * FROM libros $_pagi_sql
  #4 (permalink)  
Antiguo 27/05/2011, 11:34
Avatar de PIRRUMAN  
Fecha de Ingreso: febrero-2006
Ubicación: Monterrey, Nuevo León
Mensajes: 633
Antigüedad: 18 años, 2 meses
Puntos: 53
Respuesta: subfiltrar resultados

la subconsulta deberia tener algo como:

select*from libros WHERE pagina=$_pagi_sql

supongo eso es el error

SELECT * FROM libros $_pagi_sq

no hace nada
__________________
“Prefiero ser un tonto momentaneo que un eterno ignorante”
“¡El éxito es resultado de los aciertos,los aciertos resultado de la experiencia y la experiencia resultado de los errores!”
  #5 (permalink)  
Antiguo 27/05/2011, 11:38
 
Fecha de Ingreso: junio-2008
Mensajes: 291
Antigüedad: 15 años, 10 meses
Puntos: 9
Respuesta: subfiltrar resultados

Hola y gracias. Para no liaros, estoy probando con una subconsulta simple en phpmyadmin:

SELECT * FROM `libros` WHERE `titulo` LIKE '%metropolitano%' IN (SELECT * FROM `libros` WHERE `autor` LIKE '%barral%')

que es lo mismo que tengo en esa instrucción pero me da el mismo error.

el codigo:

Código PHP:
Ver original
  1. else if ((isset($_GET['buscar']))and (isset($_GET['filtrar'])) and (isset($_GET['subfiltrar']))){
  2.     $_pagi_sql = "";
  3.  
  4. if (isset ($autor) && !($autor == "")) {
  5. $_pagi_sql .= " autor LIKE '%$autor%'";
  6. }
  7. if (isset ($titulo) && !($titulo == "")) {
  8.   $palabras=explode(" ",$titulo);
  9.   foreach ($palabras as $palabra){
  10.     if (! ($_pagi_sql == "")) {$_pagi_sql .= " AND "; } //tendras que poner esto aquí
  11.     $_pagi_sql .= " titulo LIKE '%$palabra%'";
  12.   }
  13. }
  14.  
  15. if (isset ($tema) && !($tema == "")) {
  16. if (! ($_pagi_sql == "")) {$_pagi_sql .= " AND "; }
  17. $_pagi_sql .= " tema LIKE '%$tema%'";
  18. }
  19. if (isset ($editorial) && !($editorial == "")) {
  20. if (! ($_pagi_sql == "")) {$_pagi_sql .= " AND "; }
  21. $_pagi_sql .= " descripcion LIKE '%$editorial%'";
  22. }
  23. if (isset ($precio) && !($precio == "")) {
  24. if (! ($_pagi_sql == "")) {$_pagi_sql .= " AND "; }
  25. $_pagi_sql .= " precio LIKE '%$precio%'";
  26. }
  27. if (isset ($fecha) && !($fecha == "")) {
  28. if (! ($_pagi_sql == "")) {$_pagi_sql .= " AND "; }
  29. $_pagi_sql .= " descripcion LIKE '%$fecha%'";
  30. }
  31. if (isset ($clave) && !($clave == "")) {
  32. if (! ($_pagi_sql == "")) {$_pagi_sql .= " AND "; }
  33. $_pagi_sql .= " descripcion LIKE '%$clave%' OR titulo LIKE '%$clave%' OR autor LIKE '%$clave%' OR tema LIKE '%$clave%' ";
  34. }
  35. if (!($_pagi_sql == "")) {
  36. $_pagi_sql = "WHERE".$_pagi_sql;
  37. }
  38.  
  39.     $_pagi_sql = "SELECT * FROM libros WHERE titulo LIKE '%$subtitulo%' IN (SELECT * FROM libros WHERE autor LIKE '%barral%') ORDER BY  titulo ASC";}
  #6 (permalink)  
Antiguo 27/05/2011, 11:44
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: subfiltrar resultados

El error es que la subconsulta debe devolver una columna de resultados porque utilizas IN y además haces mal el IN porque usas antes el LIKE.

Así sería lo correcto:

Código MySQL:
Ver original
  1. FROM `libros`
  2. WHERE `titulo` LIKE '%metropolitano%' AND titulo IN
  3. (SELECT titulo FROM `libros` WHERE `autor` LIKE '%barral%')


Para lo que tu quieres hacer no hace falta una subconsulta:

Código MySQL:
Ver original
  1. FROM `libros`
  2. WHERE `titulo` LIKE '%metropolitano%' AND `autor` LIKE '%barral%'
  #7 (permalink)  
Antiguo 27/05/2011, 11:51
 
Fecha de Ingreso: junio-2008
Mensajes: 291
Antigüedad: 15 años, 10 meses
Puntos: 9
Respuesta: subfiltrar resultados

Hola. Gracias. Funciona correctamente en Phpmyadmin, en la web da error aún (supongo que debe ser cosa del $_pagi. He entendido mal las subconsultas pues.

Yo la hago porque tengo que aplicar 4 filtros en función del usuario a la misma página (un buscador avanzado, otro simple, un subfiltrado por campos y otro por orden) y claro es tremendo... por eso decidí utilizar esto, ya que las variables son siempre diferentes.

Gracias y sigo mirando el error
  #8 (permalink)  
Antiguo 27/05/2011, 11:57
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: subfiltrar resultados

El error en la web puede ser por la línea 36 del código que has puesto:

Código PHP:
Ver original
  1. $_pagi_sql = "WHERE ".$_pagi_sql;

Fíjate que falta el espacio entre el WHERE y la variable $_pagi_sql en el código que has puesto.
  #9 (permalink)  
Antiguo 27/05/2011, 12:07
 
Fecha de Ingreso: junio-2008
Mensajes: 291
Antigüedad: 15 años, 10 meses
Puntos: 9
Respuesta: subfiltrar resultados

Es por la concatenación, sinó aparecería toda la instrucción unida. Gracias de nuevo

Etiquetas: resultados
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 15:21.