2016-05-14 4 views
0

私の質問は簡単です。 1つのページに3つのテーブルのコンテンツを日付順に並べる方法3つのテーブル(sql)は1つのコンテンツのように表示されます

記事、ステータス、引用のような投稿があるブログです。

論文 - ID、タイトル、写真、テキスト、タイプ、日時(PHP - 時間())

STATUS - ID、タイトル、テキスト、タイプ、日時(PHP - 時間())

QUOTE - ID、引用、著者、タイプ、日時(PHP - 時間())

私は日時が注文したページのコンテンツを表示する必要があります。それから私はポストのタイプによってhtml/cssを変えることができます。

テーブルを結合するか、配列で表示する方が良いでしょうか?

ありがとうございました。

答えて

1

MySQLでソートを行う場合は、3つのテーブルのフィールドを統一し、JOINではなくUNION ALLを行う必要があります。 3つの間に関係がある場合はjoinを使うことができますが、それらのテーブルが関連していないことがわかります。

その他のオプションは、これら3つのクエリの結果を配列にマージすることです。

$merged = array(); 

foreach($articles as $k => $article){ 
    $merged[$article['Datetime']] = array('table' => 'articles', 'id' => $k); 
} 
foreach($statuses as $k => $statuse){ 
    $merged[$statuse['Datetime']] = array('table' => 'statuses', 'id' => $k); 
}foreach($quotes as $k => $quote){ 
    $merged[$quote['Datetime']] = array('table' => 'quotes', 'id' => $k); 
} 

ksort($merged); 

foreach ($merged as $key => $value) 
{ 
    $arr = $$value['table']; 
    echo $arr[$value['id']]; 
} 

もちろん、リファクタリングを行うことはできますが、このスニペットでは簡単にどのように行うことができますか。私はそれを、この単純な方法で作成されたsimmilarソリューションを探します人のために

+0

ありがとうございます!私はあなたのPHPスクリプトから何か新しいことを学んだが、私はそれをSQLで作成した。これまで決してなかったUNION ALLについて私は耳を傾けませんでした。今はとてもシンプルです。 :) – user1468448

+0

もう一つ質問があります。私はこのUNION ALL sqlですべてをロードしたい場合、すべてのテーブルで同じでないcolを表示することは不可能です。どのように私はこのコンテンツをより多くのsqlsなしで得ることができますか? – user1468448

+0

これはあなたの考えを助けるはずですか? SELECTカラム1、カラム2、 '' ASカラム3 'FROMテーブルa UNION SELECTカラム1、カラム2、カラム3 FROMテーブルb – user1468448

1

あなたは、私はタイプは、テーブルの構造、あるための条件 「ON」にIDを使用した結果を与えていない場合はタイプがすべての3つのテーブル

SELECT a.Id,a.Title,a.Photo,a.Text, 
a.Type,a.DateTime,s.Title,s.Text,q.Quote,q.Author,q.Type 
FROM ARTICLE a 
INNER JOIN STATUS s 
ON a.Type = b.Type 
INNER JOIN QUOTE q 
ON b.Type = q.Type 
GROUP BY a.Type 
ORDER BY a.Datetime ASC; 

に共通であることを前提に作られているこのquery..butを試すこと問題のproprlyで定義されていません。

+0

ありがとうございます、私は私の質問では、より多くのものを定義していないことを知っています。タイプは1,2または3です。投稿のすべてのタイプは、異なるhtml/cssスタイルに対して異なるタイプを持っています。 :) – user1468448

0

SELECT id, datetime FROM article 
UNION ALL 
SELECT id, datetime FROM status 
UNION ALL 
SELECT id, datetime FROM quote 
ORDER BY datetime ASC; 

を今私はポストのIDを知っていると日時順にソートすべてを表示することができます。

関連する問題