2016-03-26 11 views
0

マルチテーブルWHERE uid = :uidsortからマルチデータを選択する方法をお探しですか?data複数のテーブルから複数のSELECTと日付別に並べ替え

このようないくつかのこと:

SELECT * FROM 
    (SELECT * from comments) AND 
    (SELECT * from likes) AND 
    (SELECT * from photos) AND 
    (SELECT * from messages) WHERE uid = :uid ORDER BY date LIMIT 30 

実際には、プロファイルのタイムラインに、私はlikescommentsphotosと...そして、これらの部品をすべてlimitationsort by dateする必要があります表示する必要が...

EDIT:

Select cid,comment,pid,date from `ctg_comments` where uid = 69 
UNION 
Select pid,date from `ctg_likes` where uid = 69 
UNION 
Select address,postid,date from `ctg_photos` where byuid = 69 
UNION 
Select postid,date from `ctg_reservation` where uid=69 
Order by date limit 30 

私はすべてのテーブルの列のいくつかが必要ですが、UNIONを使用するのと同じではありません。

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

+2

これは何ですか? –

+0

prfileのタイムラインで、好きなもの、コメント、写真などを表示する必要があります。そして、これらの部分はすべて日付でソートする必要があります。 –

+0

MySQLクエリでは左結合を使用できます。 –

答えて

3

このソリューションでは、各テーブルの列が同じ型である必要があります。結果セットは最初のテーブルの列名を使用します。 http://dev.mysql.com/doc/refman/5.7/en/union.html

*を使用してすべての列を抽出すると、知識がなくてもコードが解読不能になるため、通常は眉をひそめることになります。データベースの。また、必要以上に多くのデータを抽出する可能性があります。

あなたがこれをしようとする場合がありますあなたのデータ構造(Iは、列の型を推測し、必要に応じてそれを修正する)で

:後にPHPで対処する方が簡単ですので、私は型の列を追加

Select 'comment' as type, 'none' as address, cid, comment, pid, date from `ctg_comments` where uid = 69 
UNION 
Select 'like' as type, 'none' as address, -1 as cid, 'none' as comment, pid, date from `ctg_likes` where uid = 69 
UNION 
Select 'photo'as type, address, -1 as cid, postid as pid, 'none' as comment, date from `ctg_photos` where byuid = 69 
UNION 
Select 'reservation' as type, 'none' as address, -1 as cid, postid as pid, 'none' as comment, date from `ctg_reservation` where uid=69 
Order by date limit 30 

(アドレス== 'none'かcid == -1 ...かどうかをテストするのではなく、スイッチのケースでこのフィールドをテストするだけです)。

+0

ありがとう@laurentですが、UNIONは同じカラムを扱っています:#1222 - 使用されたSELECT文のカラム数 –

+0

そのため、*を使用する代わりに名前を付ける必要があります。たとえば、すべてのテーブルにdate、id、string1、string2がある場合、選択は次のようになります。select date、id、string1、string2 from ... –

+0

テーブルが完全それぞれのフィールドに対して左結合と条件付きテストを使用して実行可能であっても、すべてを抽出する要求はあまり意味がありません。私は非常にそれぞれのテーブルから異なる日付でソートされた最初の30行をすべて取り出し、PHPでそれを処理することをお勧めします。 –

関連する問題