2010-03-05 7 views
0

Disons que j'ai une table screenshots et une table replies. Donc: chaque capture d'écran peut avoir plusieurs réponses (un-à-plusieurs). Maintenant, je veux créer une chronologie combinée des deux, mais en réalité, ils sont assez indépendants (dans la structure).Chronologie de 2 tables connexes

Comment puis-je sélectionner les données des deux tables, en les classant par ordre de publication, en descendant; quand par exemple, je peux avoir un post, quelques commentaires, puis un autre post; parce que ce serait la façon dont le calendrier est arrivé?

Normalement, la sélection des deux combine les tables; mais je ne veux pas que ça arrive. À ce sujet, j'ai également besoin que les tables soient distinguables. Voici la structure des tables ...

-- 
-- Table structure for table `screenshots` 
-- 

CREATE TABLE IF NOT EXISTS `screenshots` (
    `id` int(11) NOT NULL auto_increment, 
    `user` int(11) NOT NULL, 
    `description` text NOT NULL, 
    `time` timestamp NOT NULL default CURRENT_TIMESTAMP, 
    `ext` varchar(4) NOT NULL default 'png', 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `screenshot_replies` 
-- 

CREATE TABLE IF NOT EXISTS `screenshot_replies` (
    `id` int(11) NOT NULL auto_increment, 
    `user` int(11) NOT NULL, 
    `parent` int(11) NOT NULL, 
    `time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, 
    `text` text NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=27 ; 

Note: Je sais que cela peut être un double de this question mais je n'a pas trouvé la solution de travail là-bas pour moi.

Merci d'avance! :)

Répondre

4

Vous devez utiliser UNION dans ce cas:

(SELECT id, time, 'screenshots' as tableName FROM screenshots) 
UNION 
(SELECT id, time, 'replies' as tableName FROM screenshot_replies) 
ORDER BY time ASC 

Vous pouvez obtenir le tablename d'un champ en utilisant la fonction mysql_tablename en php
Vous pouvez indiquer le nom de table comme une colonne dans la

+0

Je vais jouer avec ça et voir comment ça va - jusqu'ici ça marche avec quelques inconvénients dans la façon dont les rangées sont organisées - merci! Je vais marquer cela comme la réponse si tout se passe bien :) – casraf

+0

Juste cherché mysql_tablename, semble être obsolète? En outre, je cache mes résultats dans un tableau, je ne pense pas que cela fonctionnerait encore – casraf

+2

Utilisez "union all" au lieu de simplement "union" pour éviter une étape supplémentaire "distincte" implicite – araqnid

1

Chaque fois que je rencontre un problème comme celui-ci, où vous trouvez qu'il est impossible de faire quelque chose parce que vous ne pouvez pas construire une requête qui va extraire les données, je dois commencer à vous demander les bonnes données mode l? Commencez par les données que vous souhaitez extraire, puis créez un modèle qui permet cela, pas l'inverse, et vous trouverez beaucoup de easiler sur le long terme, ainsi que des performances probablement plus rapides et bien souvent une meilleure flexibilité.

En regardant ces tableaux, je dois demander pourquoi en avoir deux? Quel est le problème avec:

 
CREATE TABLE IF NOT EXISTS `screenshots` (
    `id` int(11) NOT NULL auto_increment, 
    `user` int(11) NOT NULL, 
    `description` text NOT NULL, 
    `time` timestamp NOT NULL default CURRENT_TIMESTAMP, 
    `ext` varchar(4) default 'png', 
    `parent` int(11), 
    `text` text, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

qui vous permettra de faire ce que vous voulez, dire facilement si elle est une capture d'écran (si poste est défini), une réponse (si le parent est défini) ou ... puisque le modèle maintenant le permet ... une capture d'écran qui est une réponse !!!

+0

Cette structure n'est pas requise par mes besoins, haha: P Je n'ai pas besoin d'une capture d'écran qui est une réponse, et il m'est beaucoup plus facile de les organiser séparément. – casraf

+0

Oh, et ma structure était géniale avant que je décide de créer une chronologie jointe pour un flux RSS. Le site lui-même est fonctionnel et fonctionne presque parfaitement, c'est juste un coup de pouce que je veux lui donner. – casraf

Questions connexes