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

UNION ALL SELECT tablas diferentes

Estas en el tema de UNION ALL SELECT tablas diferentes en el foro de Mysql en Foros del Web. Hola, supongo que este tema puede ir en sql como en php, disculpas si no es así. Bien, tengo esto para realizar búsqeudas en dos ...
  #1 (permalink)  
Antiguo 29/05/2010, 14:07
 
Fecha de Ingreso: febrero-2008
Mensajes: 120
Antigüedad: 16 años, 2 meses
Puntos: 1
UNION ALL SELECT tablas diferentes

Hola, supongo que este tema puede ir en sql como en php, disculpas si no es así.


Bien, tengo esto para realizar búsqeudas en dos tablas:


$resultadod=mysql_query("SELECT * FROM tabla1


WHERE
1campo1 LIKE '%$_POST[palabra]%' OR
1campo2 LIKE '%$_POST[palabri]%' OR
1campo3 LIKE '%$_POST[palabri]%'


UNION ALL SELECT * FROM tabla2

WHERE
2campo1 LIKE '%$_POST[palabra]%' OR
2campo2 LIKE '%$_POST[palabra]%' OR
2campo3 LIKE '%$_POST[palabra]%'
", $conn);

La estructura de las tablas es identica, la diferencia esta en el numero 1 o 2


MI PROBLEMA:

es cuando añado otra tabla diferente, así:


$resultadod=mysql_query("


SELECT * FROM tabla1

WHERE
1campo1 LIKE '%$_POST[palabra]%' OR
1campo2 LIKE '%$_POST[palabri]%' OR
1campo3 LIKE '%$_POST[palabri]%'


UNION ALL SELECT * FROM tabla2

WHERE
2campo1 LIKE '%$_POST[palabra]%' OR
2campo2 LIKE '%$_POST[palabra]%' OR
2campo3 LIKE '%$_POST[palabra]%'


UNION ALL SELECT * FROM tabladiferente

WHERE
campodiferente1 LIKE '%$_POST[palabra]%' OR
campodiferente2 LIKE '%$_POST[palabra]%' OR
campodiferente3 LIKE '%$_POST[palabra]%'

", $conn);

Y claro me da el error Warning: mysql_fetch_array(): supplied argument is not a valid MySQL.... porque no lee bien la query

Qué puedo hacer al respecto? Muchas gracias
  #2 (permalink)  
Antiguo 29/05/2010, 15:34
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: UNION ALL SELECT tablas diferentes

Te recomiendo que esperes a que un moderador te mueva al foro de MySQL ya que tu pregunta es puntualmente con la consulta. Trata en ese foro no colocar código de PHP ya que las preguntas tienen que ser en base a lo que corresponde. Pero conseguirás la respuestas que necesitas en ese foro.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 30/05/2010, 08:20
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Tema movido desde PHP a MySql
  #4 (permalink)  
Antiguo 30/05/2010, 09:01
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: UNION ALL SELECT tablas diferentes

Si las tablas tienen la misma estructura, el problema debe ser la ausencia de paréntesis y la ausencia de llaves para indicar el verdadero valor de la variable (esto es más PHP). También te diría que no usaras *, sino los nombres de los campos. Esta es la idea:
$resultadod=mysql_query("


(SELECT campo1, campo2, campo3, 'tabla 1' tabla FROM tabla1

WHERE
1campo1 LIKE '%{$_POST[palabra]}%' OR
1campo2 LIKE '%{$_POST[palabri]}%' OR
1campo3 LIKE '%{$_POST[palabri]}%' )


UNION ALL (SELECT campo1, campo2, campo3, 'tabla 2' FROM tabla2

WHERE
2campo1 LIKE '%{$_POST[palabra]}%' OR
2campo2 LIKE '%{$_POST[palabra]}%' OR
2campo3 LIKE '%{$_POST[palabra]}%' )


UNION ALL (SELECT campo1, campo2, campo3, 'tabla diferente' FROM tabladiferente

WHERE
campodiferente1 LIKE '%{$_POST[palabra]}%' OR
campodiferente2 LIKE '%{$_POST[palabra]}%' OR
campodiferente3 LIKE '%{$_POST[palabra]}%' )

", $conn);

Pero, ojo, tal como está esta consulta no te indicará de qué tabla proceden los datos. Para eso tendrías que traerte tú el nombre de la tabla. Te lo pongo.
  #5 (permalink)  
Antiguo 02/06/2010, 10:15
 
Fecha de Ingreso: febrero-2008
Mensajes: 120
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: UNION ALL SELECT tablas diferentes

Gracias, Jurena.

Funciona perfecto, no obstante, parece ser que el número de campos de cada tabla debe ser el mismo, si no da error. Porqué crees que és?
  #6 (permalink)  
Antiguo 02/06/2010, 10:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: UNION ALL SELECT tablas diferentes

Es una condición mandatoria en todos los DBMS.
Si la cantidad de campos no fuese igual, ¿con qué campo unirías la columna que te sobra?
No puedes unirla con NULL... NULL es la inexistencia.

Un truco posible, es crear columnas virtuales en la tabla que le falten columnas, por medio de valores constantes con alias. De ese modo emparejarías la cantidad de columnas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 02/06/2010, 13:15
 
Fecha de Ingreso: febrero-2008
Mensajes: 120
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: UNION ALL SELECT tablas diferentes

Ok, es verdad gnzsoloyo

He creado un par de campos ghost para ello.

Por cierto, mencionaba jurena que de este modo no se identifica de que tabla es el resultado. Alguna sugerencia?

Muchas gracias.
  #8 (permalink)  
Antiguo 02/06/2010, 14:09
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: UNION ALL SELECT tablas diferentes

kadet,
te puse los alias con los nombres de las tablas. Observa en la sintaxis que creé el alias tabla con los valores 'tabla 1', 'tabla 2', 'otras tablas', para que te hagas una idea de lo que quiero decirte.
  #9 (permalink)  
Antiguo 02/06/2010, 14:32
 
Fecha de Ingreso: febrero-2008
Mensajes: 120
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: UNION ALL SELECT tablas diferentes

Jurena, perdona, no entiendo muy bien lo que quieres decir, te refieres a que incluyendo un alias en la consulta determino que tabla es?

Si es así, como la recupero?
  #10 (permalink)  
Antiguo 02/06/2010, 14:37
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: UNION ALL SELECT tablas diferentes

poniendo ese alias tabla, y los nombres de cada tabla entre comillas dentro de cada select, tendrás un campo llamado tabla con el valor del nombre de la tabla en cada registro. Lo cargarás y lo recuperarás como si lo hicieras de una columna llamada tabla.
  #11 (permalink)  
Antiguo 02/06/2010, 15:00
 
Fecha de Ingreso: febrero-2008
Mensajes: 120
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: UNION ALL SELECT tablas diferentes

Ok, Jurena, la sintaxis es así, pues?



$resultado=mysql_query("


(SELECT

id_r,
denominacion,
descripcion_bien,
domiciliacion,
denominacion,
'tabla fulanito' fulanito FROM fulanito

WHERE
denominacion LIKE '%{$_POST[palabri]}%' OR
descripcion_bien LIKE '%{$_POST[palabri]}%' OR
domiciliacion LIKE '%{$_POST[palabri]}%' OR
denominacion LIKE '%{$_POST[palabri]}%'
)


UNION ALL (SELECT

id_r,
denominacion,
descripcion_bien,
domiciliacion,
denominacion,

'tabla menganito' menganito FROM menganito

WHERE
chin_denominacion LIKE '%{$_POST[palabri]}%' OR
chin_descripcion_bien LIKE '%{$_POST[palabri]}%' OR
chin_domiciliacion LIKE '%{$_POST[palabri]}%' OR
chin_denominacion LIKE '%{$_POST[palabri]}%'

)


UNION ALL (SELECT
iden_rt,
iden_titulo_formal,
iden_localizacion,
iden_signatura,
iden_titulo_atribuido,

'tabla documentos' documentos FROM documentos

WHERE
iden_titulo_formal LIKE '%{$_POST[palabri]}%' OR
iden_localizacion LIKE '%{$_POST[palabri]}%' OR
iden_signatura LIKE '%{$_POST[palabri]}%' OR
iden_titulo_atribuido LIKE '%{$_POST[palabri]}%'


)


UNION ALL (SELECT
iden_rtb,
tipolog,
titul,
aut,
aut1,
aut2,

'tabla bibliografia' bibliografia FROM bibliografia

WHERE
bib_tipolog LIKE '%{$_POST[palabri]}%' OR
bib_titul LIKE '%{$_POST[palabri]}%' OR
bib_aut LIKE '%{$_POST[palabri]}%' OR
bib_aut1 LIKE '%{$_POST[palabri]}%' OR
bib_aut2 LIKE '%{$_POST[palabri]}%'

)



", $conn);


Y al recuperar, lo hago con
echo $row['tabla']; en un while?
???????

No me chuta, Jurena.
  #12 (permalink)  
Antiguo 02/06/2010, 16:11
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: UNION ALL SELECT tablas diferentes

No deberías escribir código PHP aquí. Evítalo en el futuro. Prueba con esto:

$resultado=mysql_query("


(SELECT

id_r,
denominacion,
descripcion_bien,
domiciliacion,
denominacion,
'fulanito' tabla FROM fulanito

WHERE
denominacion LIKE '%{$_POST[palabri]}%' OR
descripcion_bien LIKE '%{$_POST[palabri]}%' OR
domiciliacion LIKE '%{$_POST[palabri]}%' OR
denominacion LIKE '%{$_POST[palabri]}%'
)


UNION ALL (SELECT

id_r,
denominacion,
descripcion_bien,
domiciliacion,
denominacion,

'menganito' FROM menganito

WHERE
chin_denominacion LIKE '%{$_POST[palabri]}%' OR
chin_descripcion_bien LIKE '%{$_POST[palabri]}%' OR
chin_domiciliacion LIKE '%{$_POST[palabri]}%' OR
chin_denominacion LIKE '%{$_POST[palabri]}%'

)


UNION ALL (SELECT
iden_rt,
iden_titulo_formal,
iden_localizacion,
iden_signatura,
iden_titulo_atribuido,

'documentos' FROM documentos

WHERE
iden_titulo_formal LIKE '%{$_POST[palabri]}%' OR
iden_localizacion LIKE '%{$_POST[palabri]}%' OR
iden_signatura LIKE '%{$_POST[palabri]}%' OR
iden_titulo_atribuido LIKE '%{$_POST[palabri]}%'


)


UNION ALL (SELECT
iden_rtb,
tipolog,
titul,
aut,
aut1,
aut2,

'bibliografia' FROM bibliografia

WHERE
bib_tipolog LIKE '%{$_POST[palabri]}%' OR
bib_titul LIKE '%{$_POST[palabri]}%' OR
bib_aut LIKE '%{$_POST[palabri]}%' OR
bib_aut1 LIKE '%{$_POST[palabri]}%' OR
bib_aut2 LIKE '%{$_POST[palabri]}%'

)



", $conn);


Y al recuperar, lo haces con
echo $row['tabla']; en un while?
  #13 (permalink)  
Antiguo 02/06/2010, 16:33
 
Fecha de Ingreso: febrero-2008
Mensajes: 120
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: UNION ALL SELECT tablas diferentes

Ok, me queda más claro, jurena. Muchas gracias por tu gentileza.

Mis disculpas por pegar código. Una cuestión. ¿Es por que es el foro de mysql o porque debo colocarlo en un <code>?

Muchas gracias.

Te debo una.
  #14 (permalink)  
Antiguo 02/06/2010, 16:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: UNION ALL SELECT tablas diferentes

Cita:
¿Es por que es el foro de mysql
Normas del foro de Bases de Datos.
Para programación PHP está el Foro de PHP.
__________________
¿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: diferentes, select, tablas, union
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 22:17.