2010-12-04 5 views
0

J'ai fondamentalement trois différentes classes d'éléments que je veux afficher sur un mur d'utilisateurs: les notes, les commentaires et les mises à jour. Ces trois sont complètement différentes entités, mais parce qu'ils peuvent tous apparaître sur un mur d'utilisateurs, je les appelle juste "wallitem". Tous ont une propriété timestamp, qui représente la date à laquelle ils ont été créés.MySQL: Fusionner différentes entités en une seule requête

Je souhaite que les utilisateurs puissent parcourir les éléments de la paroi, classés par horodatage. Par exemple: les 10 derniers wallitems. Ou wallitems 20 à 30. Y at-il une requête MySQL qui me donne les 10 derniers "wallitems", même si toutes les différentes entités ont des colonnes différentes?

Je pourrais imaginer, récupérer une liste d'éléments, où chaque élément a toutes les propriétés de toutes les différentes entités, une propriété supplémentaire définissant le type (par exemple "rating"), si elle est en fait une note, tous les autres propriétés sont juste nulles. J'aimerais utiliser un tel dicationary dans mon code php:

foreach ($wallItemArray as $item) { 
    if ($item['type'] == "rating") { 
    $rating = $item; // use it as normal "rating"-entity 
    } else if ($item['type'] == "comment") { 
    $comment = $item; // use it as normal "comment" 
    } 
// and so on for all different entities that could represent a wallitem in this context 
} 
+0

Peut-être un syndicat choisir? – thejh

Répondre

2

Quelque chose comme

SELECT 'rating' AS type, value AS r_val, NULL AS c_val 
FROM Rating 

UNION 

SELECT 'comment' AS type, NULL AS r_val, comment_text AS c_val 
FROM Comment 

aurait pour vous lancer

Questions connexes