2016-08-23 8 views
0

自分の条件に一致する最新の行のみを表示したいとします。これは、ユーザーまたはそのパートナーからの最新のメッセージのみを表示し、ユーザーと他のパートナーとの間の次の会話の最新のメッセージを表示する会話リストページです。PHP - 2つの条件の結果がさらに多い場合、1行しか取得できません。

私はこのデータベースを持っている:

enter image description here

とデータをフェッチするには、このコード:

$db = new PDO("mysql:host=localhost; dbname=dbname", 'root', '');  

$stmt4 = $db->prepare(" 
    SELECT * 
    FROM messages 
    WHERE messages.from_id=7 
     OR messages.to_id=7 
    ORDER BY msg_id DESC 
    "); 
$stmt4->execute(); 

は、それが何らかの形で可能ですか?

+0

返される結果が1つのみの場合は、LIMIT 1句を適用してください –

+0

ここのスクリーンショットは実際には多くの情報を伝えるものではありません。スキーマが関連している場合は、質問の中の 'SHOW CREATE TABLE'の詳細を投稿してください。 – tadman

+0

f LIMITを使用していますが、1つの行のみを選択します。しかし、私はすべての会話の行を1つだけ選択する必要があります。したがって、(from_id = 20とto_id = 7)と(from_id = 7とto_id = 20)の複数の行がある場合は、最新のものだけを表示したいと思います。しかし、別の会話(fe from_id = 7とto_id = 8、from_id = 8とto_id = 7)がある場合は、その最新の行を表示して、既存のすべての会話の最後のメッセージを引き続き表示したい。たぶん私は十分にはっきりしていなかったので、他の人も同じように答えてくれたのですが、残念です@ MarkBaker –

答えて

0

あなたはちょうどあなたの要件ごとに動作するはず

select * 
FROM messages 
WHERE messages.from_id=7 
    OR messages.to_id=7 
ORDER BY timesent DESC 
LIMIT 1 

を行うことができ、それがあなたのwhere句に一致しているもののみのために先頭レコードに引っ張ってくると、それが送信された最新の時間で注文することになります。

+0

少し違った構文です。しかし、yes then then Limit 1 –

+0

LIMITを使用すると、1つの行しか選択されません。しかし、私はすべての会話の行を1つだけ選択する必要があります。したがって、(from_id = 20とto_id = 7)と(from_id = 7とto_id = 20)の複数の行がある場合は、最新のものだけを表示したいと思います。しかし、別の会話(fe from_id = 7とto_id = 8、from_id = 8とto_id = 7)がある場合は、その最新の行を表示して、既存のすべての会話の最後のメッセージを引き続き表示したい。たぶん私は十分にはっきりしていなかったので、他の人も同じように答えてくれました。ごめんなさい –

+0

@BiróNorbiああ、これはあなたの元の質問ではっきりとはっきりしていませんでした。私は今、このより良い答えに戻る時間を見つけようとしますが、まだ難しいことではありません。 –

0

クエリにLIMIT 1を追加する必要があります。

SELECT * 
FROM messages 
WHERE messages.from_id=7 
    OR messages.to_id=7 
ORDER BY msg_id DESC 
LIMIT 1 
関連する問題