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

[SOLUCIONADO] Sentencia JOINS

Estas en el tema de Sentencia JOINS en el foro de Mysql en Foros del Web. Hola Amigos. Necesito hacer una busqueda en 2 tablas diferentes, se que lo debo de hacer con JOINS pero la verdad no he trabajado con ...
  #1 (permalink)  
Antiguo 27/05/2013, 07:43
 
Fecha de Ingreso: febrero-2011
Mensajes: 195
Antigüedad: 13 años, 9 meses
Puntos: 1
Sentencia JOINS

Hola Amigos.

Necesito hacer una busqueda en 2 tablas diferentes, se que lo debo de hacer con JOINS pero la verdad no he trabajado con esta instruccion, necesito que me ayuden a formular la instruccion.


Tengo 2 tablas

Tabla1
id
texto

Tabla2
id
id_relacion
categoria

Entonces en mi busqueda debo de buscar lo siguiente, buscar los registros que en la Tabla2 tengan la categoria XXXX y que ese registro en la Tabla1 tengan la palabra XXXX. La Tabla2 se relaciona con la Tabla1 por el id_relacion
  #2 (permalink)  
Antiguo 27/05/2013, 08:12
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Sentencia JOINS

Hola andoencombi:

Pregúntale a Santa Wikipedia:

http://es.wikipedia.org/wiki/Join

Ella te dará la respuesta.

Si continuas con problemas postea algo de lo que intentaste hacer y con gusto te ayudamos a afinar la sentencia.

Saludos
Leo.
  #3 (permalink)  
Antiguo 27/05/2013, 09:00
 
Fecha de Ingreso: febrero-2011
Mensajes: 195
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Sentencia JOINS

Tengo esto:
Código MySQL:
Ver original
  1.         Tabla2.id_relacion,
  2.         Tabla2.categoria,
  3.         Tabla1.id,
  4.         Tabla1.titulo,
  5.         Tabla1.fecha,
  6.         Tabla1.texto
  7.         FROM Tabla1,Tabla2
  8.        
  9.         WHERE (Tabla2.categoria='".$categoria."') AND (Tabla1.texto LIKE \"%".$buscar."%\" OR Tabla1.titulo LIKE \"%".$buscar."%\") AND Tabla1.fecha_nota BETWEEN '".$eldiapasado."' AND '".$eldiafuturo." '

Como veras tiene algunos campos mas, te explico lo que la consulta debe de hacer

Seleccionar el registro donde en la Tabla2 la categoria sea igual a la variable y en la Tabla1 tenga la palabra a buscar en el campo texto o titulo y que en la Tabla1 la fecha este entre las dos fechas que traen las variables

Al momento de ejecutarlo me salen muchos resultados del mismo registro!!

Última edición por gnzsoloyo; 27/05/2013 a las 09:33 Razón: Codigo de programación NO PERMITIDO en foros de BBDD.
  #4 (permalink)  
Antiguo 27/05/2013, 09:20
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Sentencia JOINS

Hola de nuevo andoencombi:

Revisaste la liga que te puse??? no lo creo, pues si lo hubieras hecho te habrías dado cuenta que es mejor utilizar JOIN's que hacer las uniones en el FROM-WHERE:

En lugar de hacer esto:

Código:
...
FROM tabla1, tabla2 WHERE tabla1.campo = tabla2.campo
...
Has esto:

Código:
...
FROM tabla1 INNER JOIN tabla2 ON tabla1.campo = tabla2.campo
...
Ahora bien, volvamos a tu consulta. en el WHERE NO ESTÁS COLOCANDO NINGUNA RELACIÓN ENTRE TUS TABLAS, por lo tanto se está realizando un PRODUCTO CARTESIANO entre las mismas, checa este script para que veas a qué me refiero, supongamos que tienes estas dos tablas:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaA;
  2. +------+-------------+
  3. | id   | descripcion |
  4. +------+-------------+
  5. |    1 | uno         |
  6. |    2 | dos         |
  7. |    3 | tres        |
  8. +------+-------------+
  9. 3 rows IN SET (0.00 sec)
  10.  
  11. mysql> SELECT * FROM tablaB;
  12. +------+-------------+
  13. | id   | descripcion |
  14. +------+-------------+
  15. |    1 | one         |
  16. |    2 | two         |
  17. |    3 | three       |
  18. +------+-------------+
  19. 3 rows IN SET (0.00 sec)

Lo que tú estás haciendo es algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaA, tablaB
  2.     -> WHERE tablaA.id = 1;
  3. +------+-------------+------+-------------+
  4. | id   | descripcion | id   | descripcion |
  5. +------+-------------+------+-------------+
  6. |    1 | uno         |    1 | one         |
  7. |    1 | uno         |    2 | two         |
  8. |    1 | uno         |    3 | three       |
  9. +------+-------------+------+-------------+
  10. 3 rows IN SET (0.00 sec)

Es decir, en el WHERE pones una condición, de que el id = 1, pero NO ESPECIFICAS COMO ESTÁN RELACIONADAS LAS DOS TABLAS... deberías hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaA
  2.     -> INNER JOIN tablaB ON TablaA.id = TablaB.id
  3.     -> WHERE tablaA.id = 1;
  4. +------+-------------+------+-------------+
  5. | id   | descripcion | id   | descripcion |
  6. +------+-------------+------+-------------+
  7. |    1 | uno         |    1 | one         |
  8. +------+-------------+------+-------------+
  9. 1 row IN SET (0.00 sec)

Observa que en la sección ON especifico la relación faltante (en tu caso sería una relación entre ID y id_relacion)

Haz la prueba y nos comentas.

Finalmente no postees código PHP, en lugar de poner ($buscar, $eldiapasado, etc.) POSTEA LOS VALORES QUE TIENEN ESTOS PARÁMETROS. también ahí puede haber problemas.

Saludos
Leo.
  #5 (permalink)  
Antiguo 27/05/2013, 11:55
 
Fecha de Ingreso: febrero-2011
Mensajes: 195
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Sentencia JOINS

Muchas Gracias!! ya quedo mi consulta, si es como me decias leonardo_joseu muchas gracias!!!

Etiquetas: joins, registro, registros, sentencia, 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 08:15.