Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta multiple para buscador

Estas en el tema de Consulta multiple para buscador en el foro de Mysql en Foros del Web. Saludos, en el buscador que me encuentro haciendo, hice una consulta en la cual pueda llamar las 8 tablas desde mi base de datos las ...
  #1 (permalink)  
Antiguo 04/03/2013, 18:29
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 17 años, 3 meses
Puntos: 28
Consulta multiple para buscador

Saludos,

en el buscador que me encuentro haciendo, hice una consulta en la cual pueda llamar las 8 tablas desde mi base de datos las cuales son

hoteles
rest
nautica
pecuaria
embarcaderos
eventos
emergencias
clasificados

de la siguiente manera

Código PHP:
<?php
@$busqueda $_POST["for"] ;

//cadena de conexion 
$conexion mysql_connect("localhost","morr0113_admin","morro2012"); 
mysql_select_db("morr0113_2012"$conexion); 
//DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe 
if ($busqueda<>''){ 
      
//Mostramos los titulos de los articulos o lo que deseemos... 
      
$trozos=explode(" ",$busqueda);

$cadbuscar = array();

foreach(
$trozos as $palabra){
     
$cadbuscar[] = "hoteles.descripcion LIKE '%$palabra%' OR hoteles.titulo LIKE '%$palabra%' OR rest.descripcion LIKE '%$palabra%' OR rest.titulo LIKE '%$palabra%' OR pecuaria.descripcion LIKE '%$palabra%' OR pecuaria.titulo LIKE '%$palabra%' OR nautica.descripcion LIKE '%$palabra%' OR nautica.titulo LIKE '%$palabra%' OR embarcaderos.descripcion LIKE '%$palabra%' OR embarcaderos.titulo LIKE '%$palabra%' OR eventos.descripcion LIKE '%$palabra%' OR eventos.titulo LIKE '%$palabra%' OR emergencias.descripcion LIKE '%$palabra%' OR emergencias.titulo LIKE '%$palabra%' OR clasificados.descripcion LIKE '%$palabra%' OR clasificados.titulo LIKE '%$palabra%'";
}
$query "SELECT hoteles.descripcion, hoteles.titulo, rest.descripcion, rest.titulo, pecuaria.descripcion, pecuaria.titulo, nautica.descripcion, nautica.titulo, embarcaderos.descripcion, embarcaderos.titulo, eventos.descripcion, eventos.titulo, emergencias.descripcion, emergencias.titulo, clasificados.descripcion, clasificados.titulo FROM hoteles, rest, pecuaria, nautica, embarcaderos, eventos, emergencias, clasificados WHERE ";
$query .= implode(' or '$cadbuscar);
$query .= " LIMIT 50";

$result=mysql_query($query$conexion);  

}
?>
el problema está en que cuando busco.. no me arroja ni resultados ni errores...
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #2 (permalink)  
Antiguo 04/03/2013, 19:31
Avatar de xtimed  
Fecha de Ingreso: julio-2009
Ubicación: BCN - México
Mensajes: 226
Antigüedad: 15 años, 4 meses
Puntos: 41
Respuesta: Consulta multiple para buscador

imprime lo que contiene la variable $query antes de ejecutar la sentencia
__________________
Genio es todo aquel que conoce sus cualidades
  #3 (permalink)  
Antiguo 04/03/2013, 20:03
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 17 años, 3 meses
Puntos: 28
Respuesta: Consulta multiple para buscador

le di.. buscar la ´palabra hotel y me mostr+o esto

SELECT hoteles.descripcion, hoteles.titulo, rest.descripcion, rest.titulo, pecuaria.descripcion, pecuaria.titulo, nautica.descripcion, nautica.titulo, embarcaderos.descripcion, embarcaderos.titulo, eventos.descripcion, eventos.titulo, emergencias.descripcion, emergencias.titulo, clasificados.descripcion, clasificados.titulo FROM hoteles, rest, pecuaria, nautica, embarcaderos, eventos, emergencias, clasificados WHERE hoteles.descripcion LIKE '%hotel%' OR hoteles.titulo LIKE '%hotel%' OR rest.descripcion LIKE '%hotel%' OR rest.titulo LIKE '%hotel%' OR pecuaria.descripcion LIKE '%hotel%' OR pecuaria.titulo LIKE '%hotel%' OR nautica.descripcion LIKE '%hotel%' OR nautica.titulo LIKE '%hotel%' OR embarcaderos.descripcion LIKE '%hotel%' OR embarcaderos.titulo LIKE '%hotel%' OR eventos.descripcion LIKE '%hotel%' OR eventos.titulo LIKE '%hotel%' OR emergencias.descripcion LIKE '%hotel%' OR emergencias.titulo LIKE '%hotel%' OR clasificados.descripcion LIKE '%hotel%' OR clasificados.titulo LIKE '%hotel%' LIMIT 50

o sea que mi error esta al llamar los datos???

Código PHP:
<?php  While($row=mysql_fetch_object($result)) {
  
//muestras resultados
 
      
$descripcion=$row->descripcion
      
$titulo=$row->titulo
      echo 
$descripcion." - ".$titulo."<br>"
   } 
?>
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #4 (permalink)  
Antiguo 04/03/2013, 20:31
Avatar de xtimed  
Fecha de Ingreso: julio-2009
Ubicación: BCN - México
Mensajes: 226
Antigüedad: 15 años, 4 meses
Puntos: 41
Respuesta: Consulta multiple para buscador

No estoy seguro pero prueba esto:
Código PHP:
Ver original
  1. Código PHP:
  2.  
  3. <?php  While($row=mysql_fetch_object($result)) {
  4.   //muestras resultados
  5.  
  6.       $descripcion=$row['descripcion'];  
  7.       $titulo=$row['titulo'];  
  8.       echo $descripcion." - ".$titulo."<br>";  
  9.    }  
  10. ?>
Tal vez sea lo mismo, como te digo, no estoy muy seguro pero prueba de esa manera, otra cosa que deberias de probar es copiar lo que te muestra la variable $query, directamente en mysql y ver si te arroja datos
__________________
Genio es todo aquel que conoce sus cualidades
  #5 (permalink)  
Antiguo 04/03/2013, 20:35
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 17 años, 3 meses
Puntos: 28
Respuesta: Consulta multiple para buscador

Cita:
Iniciado por xtimed Ver Mensaje
otra cosa que deberias de probar es copiar lo que te muestra la variable $query, directamente en mysql y ver si te arroja datos
como hago esto?
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #6 (permalink)  
Antiguo 04/03/2013, 20:42
Avatar de xtimed  
Fecha de Ingreso: julio-2009
Ubicación: BCN - México
Mensajes: 226
Antigüedad: 15 años, 4 meses
Puntos: 41
Respuesta: Consulta multiple para buscador

Tienes instalado PHPMyAdmin?
__________________
Genio es todo aquel que conoce sus cualidades
  #7 (permalink)  
Antiguo 04/03/2013, 20:44
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 17 años, 3 meses
Puntos: 28
Respuesta: Consulta multiple para buscador

si.. estoy configurando en el mismo servidor
http://www.morrocoycincoestrellas.com
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #8 (permalink)  
Antiguo 04/03/2013, 20:45
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Consulta multiple para buscador

Cita:
Iniciado por T4ke0veR Ver Mensaje
como hago esto?
Vaya, ahora resulta que el sentido común anda escaso estos días.

Código PHP:
$query "ESTA ES LA CONSULTA DE SQL A EJECUTAR";

// entonces la imprimes antes de ejecutarla

echo "SQL: $query";

// después la ejecutas

$result mysql_query($query); 
No lo tomes a mal, pero es algo tan básico que deberías estar acostumbrado a hacerlo, ya que para nosotros es imposible adivinar si la consulta está bien o mal formada.

Por eso debes imprimir la consulta y observar si es correcta o no.

Además sirve que la compartes ya que aquí hay muchos ojos dispuestos a ver si algo anda mal ahí.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 04/03/2013, 20:52
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 17 años, 3 meses
Puntos: 28
Respuesta: Consulta multiple para buscador

Creo que mal entendiste... me esta diciendo que tome lo que me muestra el echo al query y lo ejecute en el phpmyadmin.... si mal no me equivoco es eso!!!.. si fuese solo imprimir la consulta ya lo hubiese hecho!


en el PHPMyAdmin

MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas). ( La consulta tardó 0.0008 seg )

no deberia!!!.. hay muchos datos de esa palabra
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #10 (permalink)  
Antiguo 04/03/2013, 20:55
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Consulta multiple para buscador

Cita:
Iniciado por T4ke0veR Ver Mensaje
Creo que mal entendiste... me esta diciendo que tome lo que me muestra el echo al query y lo ejecute en el phpmyadmin.... si mal no me equivoco es eso!!!.. si fuese solo imprimir la consulta ya lo hubiese hecho!
Pues no, según lo que él dice es eso y no más.

Cita:
Iniciado por xtimed Ver Mensaje
imprime lo que contiene la variable $query antes de ejecutar la sentencia
Obvio, imprimir la consulta por si sola no sirve de nada, es bueno que la imprimas directamente en phpMyAdmin así como pegarla acá.

Adivinos no somos.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 04/03/2013, 21:00
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 17 años, 3 meses
Puntos: 28
Respuesta: Consulta multiple para buscador

Ya la imprimi directamente en el phpMyAdmin y me da 0 resultados ...
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #12 (permalink)  
Antiguo 04/03/2013, 21:03
Avatar de xtimed  
Fecha de Ingreso: julio-2009
Ubicación: BCN - México
Mensajes: 226
Antigüedad: 15 años, 4 meses
Puntos: 41
Respuesta: Consulta multiple para buscador

El echo de imprimir lo que contiene la sentencia es para ver si tienes algun error al momento de ejecutarla, y mas facil te das cuenta al ejecutarla directamente en phpMyAdmin
__________________
Genio es todo aquel que conoce sus cualidades
  #13 (permalink)  
Antiguo 04/03/2013, 21:04
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 17 años, 3 meses
Puntos: 28
Respuesta: Consulta multiple para buscador

o sea imprimir esto...

SQL: SELECT hoteles.descripcion, hoteles.titulo, rest.descripcion, rest.titulo, pecuaria.descripcion, pecuaria.titulo, nautica.descripcion, nautica.titulo, embarcaderos.descripcion, embarcaderos.titulo, eventos.descripcion, eventos.titulo, emergencias.descripcion, emergencias.titulo, clasificados.descripcion, clasificados.titulo FROM hoteles, rest, pecuaria, nautica, embarcaderos, eventos, emergencias, clasificados WHERE hoteles.descripcion LIKE '%tucacas%' OR hoteles.titulo LIKE '%tucacas%' OR rest.descripcion LIKE '%tucacas%' OR rest.titulo LIKE '%tucacas%' OR pecuaria.descripcion LIKE '%tucacas%' OR pecuaria.titulo LIKE '%tucacas%' OR nautica.descripcion LIKE '%tucacas%' OR nautica.titulo LIKE '%tucacas%' OR embarcaderos.descripcion LIKE '%tucacas%' OR embarcaderos.titulo LIKE '%tucacas%' OR eventos.descripcion LIKE '%tucacas%' OR eventos.titulo LIKE '%tucacas%' OR emergencias.descripcion LIKE '%tucacas%' OR emergencias.titulo LIKE '%tucacas%' OR clasificados.descripcion LIKE '%tucacas%' OR clasificados.titulo LIKE '%tucacas%' LIMIT 50
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #14 (permalink)  
Antiguo 05/03/2013, 05:58
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 17 años, 3 meses
Puntos: 28
Respuesta: Consulta multiple para buscador

lo que me gustaria saber es si estoy en lo correcto con mi consulta.. son 8 tablas con campos llamados iguales... cuando le doy a mi buscador no me arroja resultado alguno...

Leí algo con INNER JOIN pero no logro entender el verdadero funcionamiento de este
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...

Última edición por T4ke0veR; 05/03/2013 a las 06:16
  #15 (permalink)  
Antiguo 05/03/2013, 10:41
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Consulta multiple para buscador

Pienso que desde un inicio tu problema no era con PHP, entonces reporto tu tema para que lo muevan al foro de base de datos ya que SQL es un lenguaje independiente de PHP.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #16 (permalink)  
Antiguo 05/03/2013, 17:21
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 17 años, 3 meses
Puntos: 28
Respuesta: Consulta multiple para buscador

pero la sentencia la estoy ejecutando en php... se supone q esas funciones vienen de php..
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #17 (permalink)  
Antiguo 05/03/2013, 18:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Consulta multiple para buscador

Cita:
Iniciado por T4ke0veR Ver Mensaje
pero la sentencia la estoy ejecutando en php... se supone q esas funciones vienen de php..
Que estés ejecutando la consulta desde PHP, no hace que la consulta sea PHP.... Sigue siendo SQL... embebido en PHP. Pero es SQL.

Eso me parece bastante obvio.

Ahora, yendo a la consulta en sí, si la ordenamos (¿por qué será que nunca la escriben estructuradamente, como para poder leerla mejor?), quedaría mas o menos:

Código MySQL:
Ver original
  1.     hoteles.descripcion,
  2.     hoteles.titulo,
  3.     rest.descripcion,
  4.     rest.titulo,
  5.     pecuaria.descripcion,
  6.     pecuaria.titulo,
  7.     nautica.descripcion,
  8.     nautica.titulo,
  9.     embarcaderos.descripcion,
  10.     embarcaderos.titulo,
  11.     eventos.descripcion,
  12.     eventos.titulo, emergencias.descripcion,
  13.     emergencias.titulo,
  14.     clasificados.descripcion,
  15.     clasificados.titulo
  16.     hoteles,
  17.     rest,
  18.     pecuaria,
  19.     nautica,
  20.     embarcaderos,
  21.     eventos,
  22.     emergencias,
  23.     clasificados
  24.     hoteles.descripcion LIKE '%tucacas%'
  25.     OR
  26.     hoteles.titulo LIKE '%tucacas%'
  27.     OR
  28.     rest.descripcion LIKE '%tucacas%'
  29.     OR
  30.     rest.titulo LIKE '%tucacas%'
  31.     OR
  32.     pecuaria.descripcion LIKE '%tucacas%'
  33.     OR
  34.     pecuaria.titulo LIKE '%tucacas%'
  35.     OR
  36.     nautica.descripcion LIKE '%tucacas%'
  37.     OR
  38.     nautica.titulo LIKE '%tucacas%'
  39.     OR
  40.     embarcaderos.descripcion LIKE '%tucacas%'
  41.     OR
  42.     embarcaderos.titulo LIKE '%tucacas%'
  43.     OR
  44.     eventos.descripcion LIKE '%tucacas%'
  45.     OR
  46.     eventos.titulo LIKE '%tucacas%'
  47.     OR
  48.     emergencias.descripcion LIKE '%tucacas%'
  49.     OR
  50.     emergencias.titulo LIKE '%tucacas%'
  51.     OR
  52.     clasificados.descripcion LIKE '%tucacas%'
  53.     OR
  54.     clasificados.titulo LIKE '%tucacas%'
Por lo pronto, como consulta es un espanto: No sólo no has puesto ni una condición que relacione las tablas, con lo que puede estar cruzando cualquier cosa con cualquier otra, sino que semejante colección de ORs y LIKEs (¿por qué siempre abusan tanto de una clausula tan espantosa?), puede devolver cualquier cosa... previo leer todos los registros de todas las tablas sin excepciones.
Hay al menos un par de errores básicos: Como no estás indicando las relaciones entre las tablas (si es que existen), MySQL asume que los campos del mismo nombre entre las diferentes tablas son los que las relacionan e intenta hacer un JOIN implícito entre todas usando ese criterio.
Pero si hubiese en todas campos "descripcion", o "nombre", por ejemplo, el resultado sería... nulo. Y sería nulo porque muy probablemente no haya clasificados que compartan con emergencias su contenido en campos de ese nombre.
Además, al operar como un INNER JOIN, la coincidencia debe ser total, entre todas las tablas al mismo tiempo, cosa bastante poco probable.
Lo del OR, lo dejaremos para después, pero desde ya lo que estás haciendo es incorrecto e ineficiente como mínimo. Te lo aseguro.

Deberías profundizar en el SQL y las BBDD, antes de seguir adelante.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #18 (permalink)  
Antiguo 05/03/2013, 19:30
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 17 años, 3 meses
Puntos: 28
Respuesta: Consulta multiple para buscador

Por eso pregunto aca, para que me aconsejen o me indiquen si algun error tengo... Se que habia algo de INNER JOIN pero no se ni como funciona y si eres programador debes saber que a los clientes no les importa si debes o no profundizar.. solo les importa que le entregues el trabajo, lamentablemente soklo recurri aca por ayuda pues ando desorientado.. Pero al parecer el sentido del foro se ha perdido, ahora la respuestas son bastante agrias...
No todos somos programadores expertos... pero en fin...
Gracias por la ayuda y disculpen la perdida de tiempo!!!
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #19 (permalink)  
Antiguo 05/03/2013, 20: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: 17 años
Puntos: 2658
Respuesta: Consulta multiple para buscador

Mira, lo que los clientes necesitan es resolver sus necesidades, pero está en el desarrollador capacitarse lo suficiente para poder cumplir con esas expectativas. Y desde ese ángulo, como mínimo tienes que darte cuenta que te estás embarcando en un proyecto sin estar suficientemente preparado.
Siendo así, y comprendiendo que te faltan herramientas, nosotros podemos colaborar a que vayas resolviendo el inconveniente, si es que realmente quieres hacerlo. Pero no lo haremos por tí. Si no te pones a leer, a estudiar y a practicar SQL y Bases de Datos, nosotros no podemos hacerlo por tí.
Ahora bien, como mínimo necesitamos que nos aportes los elementos fundamentales. Como ya te dije, esa consulta es un espanto (y no es una exageración), entre otras cosas porque es imposible saber cuáles son las relaciones entre las tablas.
Así que para comenzar necesitaríamos ver eso. Postea, entonces, la estructura de las tablas, y por tal me refiero a los CREATE TABLE de cada una, porque es la única parte que nos puede dar una pista de cómo se vinculan una a otra. Y sin saber eso, la consulta que quieres es imposible.

Cita:
Por eso pregunto aca, para que me aconsejen o me indiquen si algun error tengo...
Ya te mencioné al menos dos, y de esos no me respondiste nada que me haga pensar que los has considerado o intentado entender.
Cita:
Se que habia algo de INNER JOIN pero no se ni como funciona
Eso sólo se resuelve estudiando y dedicándole tiempo.
Cita:
si eres programador debes saber que a los clientes no les importa si debes o no profundizar.. solo les importa que le entregues el trabajo
No soy programador, soy analista funcional y desarrollador de BBDD. En ese sentido estoy más preparado para estos temas que un programador, tengo experiencia en programación avanzada y bastante amplia. Pero por sobre todo sé que los clientes no necesitan saber cómo resuelves las cosas, pero sin prepararte adecuadamente, tampoco se las podrás resolver.

Mi frase preferida para los clientes siempre ha sido: "Usted dígame qué necesita. El cómo se logra, es mi responsabilidad."

Y para esa responsabilidad sólo hay un camino: Estudiar.

Cita:
lamentablemente soklo recurri aca por ayuda pues ando desorientado.. Pero al parecer el sentido del foro se ha perdido, ahora la respuestas son bastante agrias...
Pues lamento si te parecieron agrias, porque esa no fue la intención, sino hacerte ver que estabas intentando cosas que simplemente no te van a funcionar, y que realmente fallan porque están mal hechas. No es una exageración.
Se pueden resolver, pero te va a llevar esfuerzo y dedicación.

¿Estás dispuesto a intentarlo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #20 (permalink)  
Antiguo 05/03/2013, 20:51
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 17 años, 3 meses
Puntos: 28
Respuesta: Consulta multiple para buscador

Estoy en eso.. pero no logro entender como relaciono el INNER JOIN en las tablas..

se que pude ser algo como SELECT campo.tabla, campo2.tabla, campo.tabla2, campo2.tabla2 FROM tablas INNER JOIN ¿ ?
Es aqui donde me tranco... Que debo comparar??? se supone que son los campos iguales.. Pero he leido y no logro entender el verdadero significado del mismo...

o es

SELECT tabla1.descripcion, tabla1.titulo FROM tabla1 INNER JOIN tabla2 ON tabla1.descipcion = tabla2.descripcion INNER JOIN tabla3 ON tabla3.descipcion

estoy en lo correcto en algun sitio?
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #21 (permalink)  
Antiguo 05/03/2013, 21:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Consulta multiple para buscador

INNER JOIN (ver artículo: INNER JOIN) se usa para indicar que uno o más campos de una tabla están relacionados con otros tantos de la seguda, tales que sólo se devolverán como resultado aquellos registros donde los valores sean coincidentes entre ambas.
En esencia es el caso de una factura, donde el encabezado de la factura (numero, fecha, cliente, etc) se registra en una tabla, mientras que el detalle (numerode factura, numero de item, codigo de articulo, cantidad) se registra en otra. como la segunda tabla (detalle) contiene también en cada registro el numero de factura a que pertenece ese subitem, la consulta queda:
Código MySQL:
Ver original
  1. SELECT a, b, c, d, e, f
  2. FROM factura F INNER JOIN detalle D ON F.numerofactura = D.numerofactura
  3. WHERE F.numerofactura = 123
Esto devolverá sólo los datos de la factura 123, junto con todo el detalle de la misma factura.

En tu caso, para poder saber cómo relacionar hoteles, rest, pecuaria, nautica, embarcaderos, eventos, emergencias y clasificados, necesitamos conocer la estructura de cada tabla (el CREATE TABLE de cada una), para ver cómo es la relación, ya que es muy posible (metida de pata muy habitual en los principiantes) que hayas usado diferentes nombres para le valor de FOREIGN KEY respecto de la PK referida. Y en ese caso, MySQL no puede saberlo. Hay que indicarlo en forma específica.
Por ejemplo:
Código MySQL:
Ver original
  1. SELECT a, b, c, d, e, f
  2. FROM factura F INNER JOIN detalle D ON F.id = D.id_factura
  3. WHERE F.id = 123

Este sería el ejemplo más habitual de como ponen el mismo valor con diferenets nombres en cada tabla.
Como MySQL, en los JOIN implícitos (la coma) hace matching usando el nombre de las columnas, puede estar intentando cruzar ID de una tabla con ID de otra, cuando en realidad se refieren a valores completamente diferentes e incompatibles.
Y en ese caso los resultados son irreales, si es que existen.

Ten muy en cuenta que no se pueden ni se deben hacer JOINs entre tablas que no estén relacionadas. Es decir, que si no estableciste relaciones PK/FK en tus tablas, la consulta sería simplemente imposible; devolvería trash data.

Si no sabes cómo recuperar los CREATE TABLE, simplemente haz:
Código MySQL:
Ver original
  1. SHOW CREATE TABLE hoteles;
  2. SHOW CREATE TABLE pecuaria;
  3. SHOW CREATE TABLE nautica;
  4. SHOW CREATE TABLE embarcaderos;
  5. SHOW CREATE TABLE eventos;
  6. SHOW CREATE TABLE emergencias;
  7. SHOW CREATE TABLE clasificados ;
Copia el resultado de cada una, y postealo acá.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 05/03/2013 a las 21:11
  #22 (permalink)  
Antiguo 05/03/2013, 23:23
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 17 años, 3 meses
Puntos: 28
Respuesta: Consulta multiple para buscador

ummmm ya te entiendo para que se usa el Join... es como q por ejemplo.. id_hotel = id_pecuaria ... se relacionan de alguna manera ... Ahora bien... mis tablas no se relacionan...

cada una es una tabla donde se guardan datos d un directorio comercial.. lo q yo deseo hacer es enviando un POST mediante un formulario es extraer dichos datos...

ahora lo que me pide es ...

Código:
CREATE TABLE `emergencias` 
(  `id` int(11) NOT NULL AUTO_INCREMENT,  
`id_cat` int(11) NOT NULL, 
 `titulo` text NOT NULL,  
`descripcion` text NOT NULL,  
`contactos` text NOT NULL,  
`adicional` text NOT NULL,  
`img` text NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=51 DEFAULT CHARSET=latin1

CREATE TABLE `hoteles` (  
`id` int(11) NOT NULL AUTO_INCREMENT,  
`id_cat` int(11) NOT NULL,  
`titulo` text NOT NULL,  
`descripcion` text NOT NULL,  
`contactos` text NOT NULL,  
`adicional` text NOT NULL,  
`img` text NOT NULL,  
PRIMARY KEY (`id`),  FULLTEXT KEY `descripcion` (`descripcion`)) ENGINE=MyISAM AUTO_INCREMENT=92 DEFAULT CHARSET=latin1
SOlo hoteles es MyISAM
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #23 (permalink)  
Antiguo 06/03/2013, 03:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Consulta multiple para buscador

Bueno, allí comienza el problema, un INNER JOIN (y la coma es implícitamente uno), requiere que exista alguna relación.
Ahora bien, como te dije, un JOIN implícito intentará realizar el JOIN igualando todos aquellos campos que tengan el mismo nombre en ambas tablas, y en el ejemplo de esas dos tablas significa que intentará igualar todos los campos de "emergencias" con todos los campos de "hoteles".
Obviamente ese JOIN devolverá NULL porque es imposible que haya un registro de cada tabla que coincida en todos los campos con el otro. ¿No te parece?
Bien, entonces viene la segunda parte:
En un INNER JOIN múltiple, si una sola de las relaciones devuelve NULL, se hace NULL todo el resultado.
¿Se entiende?
Es lo mismo que realizar una multiplicación de siete términos, y uno de ellos ponerlo en cero (0): El resultado será cero, no importa cuantos números pongas.

Lo que pareces estar intentando es evitarte varias consultas, tratando de invocar todas las tablas en una sola, aunque no haya relaciones entre ellas.
Bueno, eso no lo podrás hacer. Las consultas deben tener integridad lógica, deben tener alguna relación para poder devolver datos.

Respecto a las tablas MyISAM, ese tipo de tabla no permite FK, pero el tema es que no las permite estructuralmente. Es decir, carece de ese recurso desde la definición de las tablas.
Pero eso no te impide crear la relación, y mantener la integridad por medio de validaciones, sea en SP o sea programáticamente.
¿Se entiende la idea?
Es decir que la integridad, en lugar de protegerla la base, la debes proteger tu.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #24 (permalink)  
Antiguo 06/03/2013, 07:27
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 17 años, 3 meses
Puntos: 28
Respuesta: Consulta multiple para buscador

Es decir, lo que debo hacer es buscar en cada tabla por separado, puesto a que ellas no tienen un campo valido que las relacione, por lo tanto deberé realizar consultas por separado a menos que modifique mis tablas y busque relacionarlas de alguna manera, cierto?

Ahora mi pregunta es, ¿seria conveniente que yo agregara un campo "identificador" con el que pueda relacionarlas? es decir, campo "activo" en donde todos los datos ingresados y publicados sea = 1 y con el hacer el JOIN para finalmente lograr la busqueda?
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #25 (permalink)  
Antiguo 06/03/2013, 07:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Consulta multiple para buscador

Exactamente, las consultas deben ser por separado.
En general, lo mejor en ese caso, si quieres seguir tratando la búsqueda sin importar en qué tabla aparezca, lo mejor sería usar un stored procedure, y evitarte múltiples llamadas. De ese modo solamente envías los parámetros adecuados, dentro del SP se realizan todas las consultas y las respuestas se podrían acumular en una tabla temporal, que finalmente sería la respuesta del SP.
Ese es un modo de resolverlo, que podría funcionarte.

Respecto a las relaciones, la respuesta sería u NO condicional.
No se deben crear relaciones por que sí. Se debe relacionar las cosas sí y sólo si esa relación existe en el sistema.
Además, dependiendo del tipo de relación que se establezca entre las entidades, eso puede requerir la creación de nuevas tablas (relaciones N:N), o modificar las claves primarias, definir indices adicionales, etc.
Es decir, al crear las relaciones es muy posible que te sea necesario modificar toda la estructura de la base de datos, porque esas relaciones exigirán normalización para evitar problemas de consistencia.
Por lo que parece, en este momento tienes las tablas como "bolsas de datos", y tu aplicación las está usando así.
Si te metes a redefinir las relaciones, terminarás teniendo que cambiar todo.
No sé si es una buena idea en este momento, aunque eventualmente lo tendrás que hacer. Pero en ese caso te recomiendo planear un desarrollo nuevo desde cero.
Modificar algo que ya está en producción, es una tortura.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #26 (permalink)  
Antiguo 06/03/2013, 08:00
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 17 años, 3 meses
Puntos: 28
Respuesta: Consulta multiple para buscador

mmmmmm ya te entiendo, pues bueno, me tocará hacer entonces consultas por separado, queria era de una base de datos ya establecida, realizar multiples consultas en una sola para que al arrojar resultados de bsuqeuda sencillamente no quedara todo tan largo y hacer un paginador a partir de esta :)

Pero bueno, Gracias por tu tiempo y gracias por las explicaciones, ya se que hacer para la próxima a la que se me presente el caso...

Saludos
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #27 (permalink)  
Antiguo 06/03/2013, 08:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Consulta multiple para buscador



__________________
¿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, php, resultados, select, sql, tabla
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 23:13.