1

画像テーブル

+----------+---------------+---------------+--------------+
| image_id | image_user_id | profile_image | image_status |
+----------+---------------+---------------+--------------+
|        1 |             1 |    834098.png |         live |
|        2 |             2 |    347903.jpg |      pending |
|        3 |             3 |    447903.jpg |      pending |
+----------+---------------+---------------+--------------+

コメント表

+------------+-----------------+---------------+
| comment_id | comment_user_id | text          |
+------------+---------------------------------+
|          1 |               1 | great article |
|          2 |               2 |       not bad |
|          3 |               3 |         lorem |
+------------+-----------------+---------------+

SQL クエリ

SELECT
    profile_image,
    comment_id
FROM comment
LEFT JOIN image ON image_user_id = comment_user_id
WHERE image_status = 'live'
LIMIT 7

上記のコードは、関連image_pendingフィールドが に設定されている場合にのみコメントを読み取りますliveprofile_imageが のときに読み取れるようにコードを変更するにはどうすればよいimage_statusですliveか?

上記のコードは次のように出力されます。

array( 'profile_image' => '834098.png', 'comment_id' => 1 )

次のように出力されます。

array(
    array( 'profile_image' => '834098.png', 'comment_id' => 1 )
    array( 'comment_id' => 2 )
    array( 'comment_id' => 3 )
)
4

2 に答える 2

1

このようなものが欲しいですか?

SELECT
    profile_image,
    comment_id
FROM comment
LEFT JOIN image ON image_user_id = comment_user_id AND image_status = 'live'
LIMIT 7

戻ります:

PROFILE_IMAGE   COMMENT_ID
834098.png          1
(null)              2
(null)              3

sqlfiddle demo

代わりに結合条件をフィルター処理する場合、where 句で image_status = 'live' を使用して結果をフィルター処理していました。

于 2013-11-08T16:17:01.047 に答える
1

where句とユースケースを削除してステータスを確認してください

SELECT
(CASE WHEN image_status = 'live' THEN 
    profile_image ELSE NULL END ) profile_image ,
    comment_id
FROM comment
LEFT JOIN image ON image_user_id = comment_user_id
LIMIT 7

フィドル

于 2013-11-08T16:17:13.987 に答える