Pregunta

Estoy creando una fuente RSS en PHP que usa datos de tres tablas separadas. Todas las tablas se refieren a páginas dentro de diferentes áreas del sitio. El problema que tengo es tratar de crear los campos de enlace dentro del XML. Sin saber de qué tabla proviene cada registro, no puedo crear el enlace correcto.

¿Hay alguna manera de resolver este problema? Intenté usar mysql_fetch_field, pero devolvió valores en blanco para las tablas.

$sql = "
SELECT Title FROM table1
UNION 
SELECT Title FROM table2
UNION 
SELECT Title FROM table3";

Hay otros campos involucrados, pero esta es básicamente la consulta que estoy usando.

Cualquier ayuda sería apreciada.

Gracias.

¿Fue útil?

Solución

Debería ser lo suficientemente fácil, solo haz algo como esto:

$sql = "
SELECT Title, 1 FROM table1
UNION ALL
SELECT Title, 2 FROM table2
UNION ALL
SELECT Title, 3 FROM table3";

Otros consejos

Simplemente agregue una constante a su lista de columnas de la siguiente manera:

select 'table1' as table_name, title from table1
union all
select 'table2' as table_name, title from table2
union all
select 'table3' as table_name, title from table3

que te dará algo como:

table_name | title
-----------+-----------------------------
table1     | war and peace
table2     | 1984
table3     | terminator salvation

y así sucesivamente.

Esto le permite tener tipos de datos de cadena que probablemente facilitarán su conversión a enlaces (especialmente si usa valores que solo deben copiarse en su página en lugar de buscarlos o convertirlos) y usar como La cláusula le permitirá hacer referencia a ella como a cualquier otra columna (por nombre).

Tenga en cuenta el uso de union all : si está seguro de que no habrá filas duplicadas de las tablas (que es probablemente verdadera en este caso, ya que tiene un valor diferente de nombre_tabla para cada uno y supongo que los títulos son únicos), union all puede evitar una operación desperdiciada de ordenar y eliminar duplicados. El uso de union por sí solo puede provocar que se realicen trabajos innecesarios.

Si desea que se realice la eliminación de duplicados, simplemente vuelva a utilizar union .

Agrega una columna ficticia con un valor constante. P.ej. " Selecciona 'funky_table' como source_table, title from funky_table " para cada cláusula pero con diferentes nombres en las comillas.

la consulta de abajo funciona mejor y te da una mejor idea, ya que las consultas anteriores no representan dos veces las filas.

SELECT t1.*,t1.table_name
FROM
t1
UNION ALL
SELECT t2.*,t2.table_name
FROM
t2
LEFT OUTER JOIN 
t1
ON t1.id=t2.id
WHERE t1.id=null

la secuencia de comandos anterior no proporciona filas de datos duplicadas y se asegura de que

  1. Todos los datos comunes entre t1 y t2 como fuente t1.
  2. Origen de filas no t2 como tabla t1.
  3. Origen de filas no t1 como tabla t2.

si desea datos comunes de la tabla t2, gire la combinación hacia la izquierda

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top