SQL - Duda juntar contenido SQL

 
Vista:
sin imagen de perfil

Duda juntar contenido SQL

Publicado por Nachonal (1 intervención) el 15/01/2015 23:01:13
Quiero unir dos foros, pero las estructuras no estan en lo mismo orden, me explico:

foro 1:

INSERT INTO `phpbbz_forums` (`forum_id`, `parent_id`, `left_id`, `right_id`, `forum_parents`, `forum_name`, `forum_desc`, `forum_desc_bitfield`, `forum_desc_options`, `forum_desc_uid`, `forum_link`, `forum_password`, `forum_style`, `forum_image`, `forum_rules`, `forum_rules_link`, `forum_rules_bitfield`, `forum_rules_options`, `forum_rules_uid`, `forum_topics_per_page`, `forum_type`, `forum_status`, `forum_posts`, `forum_topics`, `forum_topics_real`, `forum_last_post_id`, `forum_last_poster_id`, `forum_last_post_subject`, `forum_last_post_time`, `forum_last_poster_name`, `forum_last_poster_colour`, `forum_flags`, `forum_options`, `display_subforum_list`, `display_on_index`, `enable_indexing`, `enable_icons`, `enable_prune`, `prune_next`, `prune_days`, `prune_viewed`, `prune_freq`, `forum_allow_solve`, `forum_allow_unsolve`, `forum_lock_solved`, `forum_solve_text`, `forum_solve_color`, `forum_evaluation`, `forum_perpost`, `forum_peredit`, `forum_pertopic`, `forum_costs`, `forum_recent_topics`, `force_attr`) VALUES


foro 2:
INSERT INTO `phpbb_forums` (`forum_id`, `parent_id`, `left_id`, `right_id`, `forum_parents`, `forum_name`, `forum_desc`, `forum_desc_bitfield`, `forum_desc_options`, `forum_desc_uid`, `forum_link`, `forum_password`, `forum_style`, `forum_image`, `forum_rules`, `forum_rules_link`, `forum_rules_bitfield`, `forum_rules_options`, `forum_rules_uid`, `forum_topics_per_page`, `forum_type`, `forum_status`, `forum_posts`, `forum_topics`, `forum_topics_real`, `forum_recent_topics`, `forum_last_post_id`, `forum_last_poster_id`, `forum_last_post_subject`, `forum_last_post_time`, `forum_last_poster_name`, `forum_last_poster_colour`, `forum_flags`, `forum_options`, `display_subforum_list`, `display_on_index`, `enable_indexing`, `enable_icons`, `enable_prune`, `prune_next`, `prune_days`, `prune_viewed`, `prune_freq`, `forum_perpost`, `forum_peredit`, `forum_pertopic`, `forum_evaluation`, `forum_allow_solve`, `forum_allow_unsolve`, `forum_lock_solved`, `forum_solve_text`, `forum_solve_color`, `enable_topic_seo`, `force_attr`) VALUES

que puedo hacer?

PS: El foro 2 es el que quiero que su estructura se mantenga.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Duda juntar contenido SQL

Publicado por leonardo_josue (1173 intervenciones) el 16/01/2015 22:03:35
Hola Nachonal:

¿A qué te refieres exactamente con "unir" dos foros? por lo que puedo ver, se puede tratar de dos tablas, en una misma Base de datos o en bases de datos distintas... sinceramente tu explicación es muy vaga como para poder darte una respuesta puntual...

Además, al hablar de Unión, lo primero que se podría venir a la mente es justamente hacer un UNION entre dos tablas... sin embargo, debes seguir las reglas establecidas por todos los DBMS's para poder hacer dicha unión, y es que el número de columnas en ambos SELECT's sea el mismo, y que la correspondencia de los campos también sea la misma...

1
2
3
SELECT campo1, campo2, ... campoN FROM tabla1
UNION ALL
SELECT campo1, campo2, ... campoN FROM tabla2

En los SELECT's tu puedes cambiar el orden de los campos, o incluso "simular" campos si es que hay diferencias... supongamos que tienes estas dos tablas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql> SELECT * FROM tabla1;
+--------+--------+--------+--------+
| campo1 | campo2 | campo3 | campo4 |
+--------+--------+--------+--------+
|      1 | uno    |     10 | one    |
|      2 | dos    |     20 | two    |
+--------+--------+--------+--------+
2 rows in set (0.00 sec)
 
mysql> SELECT * FROM tabla2;
+-------------+------+
| descripcion | id   |
+-------------+------+
| tres        |    3 |
| cuatro      |    4 |
+-------------+------+
2 rows in set (0.00 sec)

Si quisieras unir los registros de estas dos tablas, observa que tienes dos problemas:

1. El número de columnas NO ES EL MISMO, ya que la primer tabla tiene 4 campos, mientras que la segunda tiene solo 2.
2. El orden de las columnas, el nombre de los campos, y el tipo de datos no corresponde... ya que en la segunda tabla aparece primero la descripción (varchar) y después el id (numero).

En este caso, puedes hacer uso de campos "virtuales" para adecuar el número de columnas, y alterar el orden de selección para empatar los tipos:

1
2
3
4
5
6
7
8
9
10
11
12
mysql> SELECT campo1, campo2, campo3, campo4 FROM tabla1
    -> UNION ALL
    -> SELECT id campo1, descripcion campo2, 0 campo3, NULL campo4 FROM tabla2;
+--------+--------+--------+--------+
| campo1 | campo2 | campo3 | campo4 |
+--------+--------+--------+--------+
|      1 | uno    |     10 | one    |
|      2 | dos    |     20 | two    |
|      3 | tres   |      0 | NULL   |
|      4 | cuatro |      0 | NULL   |
+--------+--------+--------+--------+
4 rows in set (0.00 sec)


Observa que en el segundo SELECT altero el orden de selección de los campos (y utilizo un alias para que el nombre del los campos sea el mismo) y además agrego dos nuevos campos para completar los 4... el primero lo pongo con un valor CERO por defecto, mientras que el último lo pongo a NULL.

de esta manera quedan solventadas las diferencias entre el número y el tipo de los campos.

No sé exactamente si esto es lo que necesitas, si continuas con problemas, trata de ser un poco más específico, tomate más de tres renglones para explicar tu problema, dinos con qué DBMS estás trabajando, etc. Entre más detalles puedas proporcionarnos, más factible será tratar de ayudarte.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar