Union + join

Résolu/Fermé
Tisiph0n3 Messages postés 21 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 15 mai 2014 - 20 oct. 2011 à 01:38
Tisiph0n3 Messages postés 21 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 15 mai 2014 - 20 oct. 2011 à 02:37
Bonsoir, voici mon souci pour un site sous joomla je fais une vue qui va sortir un flux RSS principal, incluant les articles, mais également des évènements (il y a un agenda sur le site), j'ai donc deux tables différentes qui ont quelques colonnes en commun notamment un id de catégorie, je voudrais donc sortir les informations que je veux de ces deux tables en une seule requete, ce qu'il me faudrait ce serait quelque chose a mi chemin entre union et join qui sorte d'abord toutes les lignes de la table 1 rempli toutes les colonnes qui existent dans la table 2 mais pas dans la table 1 avec des null.

Puis qui sorte toutes les lignes de la table 2 en comblant les colonnes qui n'existent pas dans la table 1 avec des null, ce qui donnerait quelque chose comme:

Lignes | Col_table1 | Col_table 2.0 | Col_table 2.1 | etc
Ligne 1 table 1| blabla |null | null | null etc
Ligne x table 2| null |blalbla | blabla | blabla

Je tourne sous MySql (je n'ai pas la possibilité de changer de SGBD), merci :)

1 réponse

Tisiph0n3 Messages postés 21 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 15 mai 2014
20 oct. 2011 à 02:37
Ok c'est bon, j'ai trouvé, si ça peut en aider certains voici la requête:

(SELECT event.rawdata AS rawadata, cat.title AS category_title, cat.alias AS category_alias, article.title AS article_title, article.introtext AS article_introtext, article.fulltext AS article_fulltext

FROM jos_content AS article

LEFT OUTER JOIN jos_jevents_vevent AS event ON event.rawdata IS NULL

JOIN jos_categories AS cat WHERE article.catid = cat.id)

UNION

(SELECT event.rawdata, cat.title AS category_title, cat.alias AS category_alias, article.title AS article_title, article.introtext AS article_introtext, article.fulltext AS article_fulltext

FROM jos_jevents_vevent AS event

LEFT OUTER JOIN jos_content AS article ON article .id IS NULL

JOIN jos_categories AS cat ON event.catid = cat.id)

J'explique quand même au passage:

Select sur tous les articles du site

(SELECT event.rawdata AS rawadata, cat.title AS category_title, cat.alias AS category_alias, article.title AS article_title, article.introtext AS article_introtext, article.fulltext AS article_fulltext FROM jos_content AS article

J'y ajoute la colonne rawadata qui n'existe pas dans la table des articles, mais des évènements avec une condition qui ne sera jamais remplie (rawdata n'est jamais null) ainsi seuls les champs qui m'intéressent dans la table des articles seront retournés, la colonne rawdata faisant office de placeholder, obligatoire car les deux select d'une union doivent porter sur le même nombre de champs
LEFT OUTER JOIN jos_jevents_vevent AS event ON event.rawdata IS NULL

Je récupère le nom de la catégorie de chaque article
JOIN jos_categories AS cat WHERE article.catid = cat.id)

Pour le reste de la requete c'est la même chose, mais à l'envers
0