1

メッセージの列があり、「送信済み」フォルダーにメッセージを表示する方法を見つけようとしています。

次のクエリを実行します。

 SELECT
    `text`,
    `created`
 FROM
    `messages`
 WHERE
    `status` = 1
 ORDER BY `created` DESC
 LIMIT 1

status = 1最後の行にも がある場合にのみ結果が返されるように条件を導入したいと思いますuser_from = $user(最後の行に がuser_to = $userある場合は何も返されません)。

私のクエリは何ですか?

4

3 に答える 3

2

あなたは使用することができますsubquery

select `text`, `created` from T1
( SELECT
    `text`,
    `created`
 FROM
    `messages`
 WHERE
    `status` = 1
 ORDER BY `created` DESC
 LIMIT 1) T1
where `user_from` = $user and `user_to` != $user
于 2012-08-16T13:50:43.947 に答える
0

私があなたの質問を正しく理解しているなら、あなたはこれをしたいですか?

SELECT
    `text`,
    `created`
 FROM
    `messages`
 WHERE
    `status` = 1
    AND `user_from` = $user 
    AND `user_to` != $user
 ORDER BY `created` DESC
 LIMIT 1

もちろん$user、文字列に置き換えるか、プリペアドステートメントを使用して変数をクエリに挿入する必要があります。

于 2012-08-16T13:51:44.790 に答える
0

status=1 の最新のメッセージを選択し、それをネストされたクエリとして使用して、この 1 行の結果を出力するかどうかの条件を確認します。

   select `text`, `created`
    from
    (
        SELECT
            `text`,
            `created`,
             user_from,
             user_to
         FROM
            `messages`
         WHERE
            `status` = 1
         ORDER BY `created` DESC
         LIMIT 1
        ) t
        where (user_from = $user) 
              and (not (user_to = $user))
于 2012-08-16T13:54:16.377 に答える