2010-10-02 30 views
5

Estoy intentando generar una fuente RSS dinámica para un sitio web, y estoy teniendo problemas para escribir una consulta mySQL para ello. Tengo varias tablas separadas que contienen datos a los que necesito acceder, y quiero ordenarlos por fecha.Usando mySQL, ¿cómo ordeno por fecha en varias tablas diferentes?

Como una tabla de ejemplo:

Chapters 
release ChapterTitle ChapterContent ExtraInfo 
10/12 'Chapter 1' 'Bla bla bla' StoryTitle 
10/14 'Chapter 2' 'Bla bla bla' StoryTitle 
10/16 'Chapter 3' 'Bla bla bla' StoryTitle 
10/18 'Chapter 4' 'Bla bla bla' StoryTitle 

NewsFeed 
DATETIME Title Article 
10/11 'Website Online!' 'I now have my website!' 
10/15 'Everything Working!' 'Everything is going well!' 

quiero el tipo de volver las cosas en el orden siguiente:

Website Online Text 
Chapter 1 StoryTitle Text 
Chapter 2 Story Title Text 
Everything Working Text 
Chapter 3 Story Title Text 
Chapter 4 Story Title Text 

supongo algún tipo de unión se completa va a ser necesario (y el hecho de que los tiempos están en diferentes formatos va a hacer la vida difícil), pero eso es todo lo lejos que he llegado.

¿Alguna idea?

Editar: La idea de unión es buena, pero olvidé mencionar que hay información adicional que necesito recuperar que no se puede hacer idéntica entre los dos: requieren un manejo ligeramente diferente y necesito detectar eso (lo suficientemente fácil de detectar al verificar la información que sé que se requiere en una tabla, y si el valor es nulo, entonces es el otro tipo de entrada).

Editar edición: Aquí está mi mejor estimación del código apropiado, pero la base de datos devuelve una tabla vacía y no sé por qué. La combinación a la izquierda devuelve la mitad de la información, la combinación a la derecha devuelve la otra mitad, y si uso una combinación completa, debería obtener todo, no ninguno.

select * 
from chapter 
full join newsFeed 
on releaseDate=newsFeed.release 
limit 0, 100 

Respuesta

1

Después de mucho trabajo, por fin encontré la consulta derecha. El problema es que mySQL no admite combinaciones externas completas (WTF?), Así que tuve que unirlas. para poder realizar una clasificación en esa unión, terminé teniendo que ajustar esa unión en su propia cláusula SELECT, lo que causaba problemas con subtablas derivadas sin nombre.

El código final salga a:

select * 
from 
(
    select * from 
    (
     select chapterTitle, storyID, chapterContent, newsFeed.article, newsFeed.Title, newsFeed.release 
     from chapter 
     right join newsFeed 
     on releaseDate=newsFeed.release 
    ) AS derivedTable1 
    union 
    select * from 
    (
     select chapterTitle, storyID, chapterContent, newsFeed.article, newsFeed.title, releaseDate 
     from chapter 
     left join newsFeed 
     on releaseDate=newsFeed.release 
    ) AS derivedTable2 
) as MainTable 
order By MainTable.release desc 
3
SELECT ChapterTitle AS Title, release AS `date` 
    FROM Chapters AS sq 
UNION ALL 
SELECT Title, `DATETIME` 
    FROM NewsFeed 
ORDER BY `date` 
+0

Es posible que desee 'UNIÓN all' lugar, aunque – nos

+1

Uso UNIÓN si usted necesita para eliminar duplicados, y no hay necesidad de soportes en cada estado de ser UNION'd –

+0

Puse los soportes allí para estar seguro, no debería tener ningún impacto en el rendimiento. Gracias por editar No creo que UNION vs UNION ALL haga una diferencia aquí, ya que ambas tablas contienen datos bastante distintos. – Mchl

Cuestiones relacionadas