0
tableone: id | userid | date | photo | caption | visible
tabletwo: id | userid | date | text  | gender  | notes

列が異なる 2 つのテーブルがあります。単一のクエリを使用して両方から行を選択したいのですが、日付 (タイムスタンプ) とユーザー ID を使用してこれを行います。それらを一緒に結合することは可能ですか?

SELECT id, photo, caption, visible
FROM `tableone`
WHERE `userid` = $user->id AND `date` = '$d'
ORDER BY date desc

SELECT id, text, gender, notes
FROM `tabletwo`
WHERE `userid` = $user->id AND `date` = '$d'
ORDER BY date desc
LIMIT 1

編集: 望ましい出力:

(
    [id] => 3
    [photo] => 1
    [caption] => Sample text
    [visible] => 1
    [text] => 
    [gender] => 
    [notes] => 
)
(
    [id] => 23
    [photo] => 1
    [caption] => More sample text
    [visible] => 
    [text] => 
    [gender] => 
    [notes] => 
)
(
    [id] => 1
    [photo] => 
    [caption] => 
    [visible] => 
    [text] => Blah jaspidj
    [gender] => 2
    [notes] => Sample Text
)
4

2 に答える 2

2

あなたが探している概念はUNION( MySql UNION リファレンスを参照)、2 つのクエリの結果を結合します。通常、同じ列を持つ結果のみを結合しますが、2 つの異なるタイプのクエリを結合するよう求めています。すべての結果をまとめて表示することだけが重要で、セルが空白であることを気にしない場合は、これでうまくいくはずです。

(SELECT id, photo, caption, visible, null AS text, null AS gender, null AS notes
FROM `tableone`
WHERE `userid` = $user->id AND `date` = '$d'
ORDER BY date desc)
UNION ALL
(SELECT id, null AS photo, null AS caption, null AS visible, text, gender, notes
FROM `tabletwo`
WHERE `userid` = $user->id AND `date` = '$d'
ORDER BY date desc
LIMIT 1)

UNION ALL(の代わりに使用したことに注意してくださいUNION。これは、基本的に「重複を含むすべての結果を提供する」ことを意味します。このセットには重複があり得ないUNION ALLため、パフォーマンスを向上させるために安全に使用できます)

この出力は論理的には意味がありませんが、上記の出力例が得られるはずです。

于 2013-08-13T18:46:34.143 に答える