Foros del Web » Programando para Internet » PHP »

Buscador con chekbox, de tablas diferentes, campos diferentes, etc

Estas en el tema de Buscador con chekbox, de tablas diferentes, campos diferentes, etc en el foro de PHP en Foros del Web. Hola muy buenas. En el proyecto que estoy haciendo haciendo ahora mismo estoy con un buscador entre manos. Es un buscador avanzado, donde introduces la ...
  #1 (permalink)  
Antiguo 13/05/2014, 05:31
 
Fecha de Ingreso: diciembre-2013
Mensajes: 49
Antigüedad: 9 años, 1 mes
Puntos: 1
Buscador con chekbox, de tablas diferentes, campos diferentes, etc

Hola muy buenas.

En el proyecto que estoy haciendo haciendo ahora mismo estoy con un buscador entre manos.

Es un buscador avanzado, donde introduces la palabra y marcas los checkbox sobre las cosas que tu quieres que busque, como si fuese una busqueda avanzada de un foro.

He buscado por Google e incluso en el buscador del foro y este es donde he encontrado mas resultados. He visto varios post bastantes interesantes pero no he dado con la clave.

Porque mi consulta es diferente dependiendo de los checkbox que marques, ademas de que hace la busqueda en 5 tablas diferentes, tambien dependiendo de lo que marques, y estas 5 tablas los campos no se llaman igual.


Entonces no se como hacerlo, no lo tengo muy enfocado. He visto y probado con un FOREACH recorriendo todas las tablas metidas dentro de un array, pero no funciona porque los campos no son iguales en todos.

Lo que si tengo claro y hecho es esto:

Código:
if(isset($_POST['sector_categoria'])){
         $consulta ="tipo_categoria LIKE '%".$palabra_a_buscar."%' AND ";
	   }
if(isset($_POST['sector_comercio'])){
        $consulta .= "sector_comerciante LIKE '%".$palabra_a_buscar."%' AND ";
}
if(isset($_POST['checkbox_oferta'])){
			$consulta .="breve_descripcion LIKE '%".$palabra_a_buscar."%' AND descripcion_extendida LIKE '%".palabra_a_buscar."%' AND ";
}
if(isset($_POST['checkbox_zona'])){
			$consulta .="zona LIKE '%".$palabra_a_buscar."%' AND ";
}
 if(isset($_POST['checkbox_perfil'])){
			$consulta .="usuario_comerciante LIKE '%".$palabra_a_buscar."%' AND ";
}
 if(isset($_POST['checkbox_comentario'])){
			$consulta .="comentario LIKE '%".$palabra_a_buscar."%' AND ";
}
if(isset($_POST['checkbox_usuario'])){
			$consulta .="usuario_cliente LIKE '%".$palabra_a_buscar."%'";
}
Muchas gracias y a ver si me podeis dar alguna idea. Un saludo.
  #2 (permalink)  
Antiguo 13/05/2014, 07:43
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 14 años, 9 meses
Puntos: 326
Respuesta: Buscador con chekbox, de tablas diferentes, campos diferentes, etc

uhm........

Vamos a imaginar que tienes dos tablas sql:
Comentarios:
Id | Comentario

Y
Usuarios:
Id | Usuario

yo lo armaria algo así:
Código PHP:
$consulta "";
$palabra_a_buscar $_POST['palabra'];
foreach(
$_POST as $k => $v) {
   switch(
$k) {
        case 
'checkbox_comentario':
             if(
$consulta != ""$consulta .= " UNION ALL ";
             
$consulta .= "(SELECT datos_a_seleccionar FROM Comentarios WHERE Comentario LIKE '%".$palabra_a_buscar."%')";
        break;
         case 
'checkbox_usuario':
             if(
$consulta != ""$consulta .= " UNION ALL ";
             
$consulta .= "(SELECT datos_a_seleccionar FROM Usuarios WHERE Usuario LIKE '%".$palabra_a_buscar."%')";
        break;
}

Importante que selecciones el mismo número de campos de uno y de otro xD

Así, a bote pronto, haria algo de este estilo ;)
Saludos!
__________________
>> Eleazan's Source
>> @Eleazan
  #3 (permalink)  
Antiguo 14/05/2014, 05:28
 
Fecha de Ingreso: diciembre-2013
Mensajes: 49
Antigüedad: 9 años, 1 mes
Puntos: 1
Respuesta: Buscador con chekbox, de tablas diferentes, campos diferentes, etc

Cita:
Iniciado por Eleazan Ver Mensaje

Importante que selecciones el mismo número de campos de uno y de otro xD
No entiendo lo que me quieres decir con eso, pero si, creo que es la forma correcta, lo voy a intentar.

Saludos y gracias.
  #4 (permalink)  
Antiguo 14/05/2014, 05:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 15 años, 2 meses
Puntos: 2658
Respuesta: Buscador con chekbox, de tablas diferentes, campos diferentes, etc

Cita:
Iniciado por pixonjr Ver Mensaje
No entiendo lo que me quieres decir con eso, pero si, creo que es la forma correcta, lo voy a intentar.

Saludos y gracias.
Que un UNION, en SQL requiere que obligatoriamente todos los SELECT devuelvan la misma cantidad de columnas, del mismo tipo de dato, y en el mismo orden.

O sea, esto dispararía un error de ejecución (sqlstate) en cualquier DBMS:
Código SQL:
Ver original
  1. SELECT a, b, c, d
  2. FROM tabla1
  3. UNION [ALL]
  4. SELECT a, b, c
  5. FROM tabla2

debe ser si o si así:
Código SQL:
Ver original
  1. SELECT a, b, c, d
  2. FROM tabla1
  3. UNION [ALL]
  4. SELECT a, b, c, d
  5. FROM tabla2
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 19/05/2014, 10:36
 
Fecha de Ingreso: diciembre-2013
Mensajes: 49
Antigüedad: 9 años, 1 mes
Puntos: 1
Respuesta: Buscador con chekbox, de tablas diferentes, campos diferentes, etc

Cita:
Iniciado por gnzsoloyo Ver Mensaje

O sea, esto dispararía un error de ejecución (sqlstate) en cualquier DBMS:
Código SQL:
Ver original
  1. SELECT a, b, c, d
  2. FROM tabla1
  3. UNION [ALL]
  4. SELECT a, b, c
  5. FROM tabla2

debe ser si o si así:
Código SQL:
Ver original
  1. SELECT a, b, c, d
  2. FROM tabla1
  3. UNION [ALL]
  4. SELECT a, b, c, d
  5. FROM tabla2
Vale, pero las tablas que yo quiero buscar no tienen el mismo numero de columnas, ni las columnas son las mismas, etc.

¿Entonces que? No me creo que no haya ninguna forma de hacer este procedimiento, sin ser obligatoriamente las tablas con el mismo nº de columnas, los mismos datos y buscar las mismas columnas, etc.

Un saludo y gracias.
  #6 (permalink)  
Antiguo 19/05/2014, 11:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 15 años, 2 meses
Puntos: 2658
Respuesta: Buscador con chekbox, de tablas diferentes, campos diferentes, etc

Cita:
Iniciado por pixonjr Ver Mensaje
Vale, pero las tablas que yo quiero buscar no tienen el mismo numero de columnas, ni las columnas son las mismas, etc.

¿Entonces que? No me creo que no haya ninguna forma de hacer este procedimiento, sin ser obligatoriamente las tablas con el mismo nº de columnas, los mismos datos y buscar las mismas columnas, etc.

Un saludo y gracias.
Manual de MySQL:
Cita:
UNION se usa para combinar el resultado de un número de comandos SELECT en un conjunto de resultados.

Las columnas seleccionadas lisatadas en posiciones correspondientes de cada comando SELECT deben tener el mismo tipo. (Por ejemplo, la primera columna seleccionada por el primer comando debe tener el mismo tipo que la primer columna seleccionada por otros comandos.) Los nombres de columna usados por el primer comando SELECT se usan como nombres de columna para los resultados retornados.
Manual de Oracle:
Cita:
The corresponding expressions in the select lists of the component queries of a compound query must match in number and must be in the same data type group (such as numeric or character).
Manual de SQL Server:
Cita:
Combina los resultados de dos o más consultas en un solo conjunto de resultados que incluye todas las filas que pertenecen a las consultas de la unión. La operación UNION es distinta de la utilización de combinaciones de columnas de dos tablas.

A continuación se muestran las reglas básicas para combinar los conjuntos de resultados de dos consultas con UNION:
El número y el orden de las columnas debe ser el mismo en todas las consultas.
Los tipos de datos deben ser compatibles.
Puedo seguir, pero con eso creo que queda claro: Es una restricción de la cláusula en todos los sistemas de bases de datos.
Lo que suele hacerse ocasionalmente es crear columnas ficticias para devolver esas mismas columnas en las tablas que no las tienen, con datos nulos o vacíos, pero para eso es necesario saber cuáles son las tablas, y qué columnas hay que fabricar en cada caso.

Código SQL:
Ver original
  1. SELECT a, b, c, d, 0 e
  2. FROM tabla1
  3. UNION
  4. SELECT a, DATE('0000-00-00') b, c, d, e
  5. FROM tabla2
  6. UNION
  7. SELECT a, DATE('0000-00-00') b, 0.0 c, NULL d, e
  8. FROM tabla2
En este ejemplo, la columna "E" es numérica de enteros, la "B" es de fecha, la "C" es de decimales y la D no especificada, pero puede ser de caracteres.

¿Se entiende?

No le des vueltas al asunto. No estás tratando con PHP en este caso sino con SQL, que tiene sus propias reglas, sus exigencias y restricciones, y por sobre todo, es un lenguaje imperativo y concreto, que trabaja con cosas concretas (datos). No trabaja con supuestos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: buscador, campos, chekbox, tabla, tablas
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 16:33.