1

次のクエリがあります。

"SELECT DISTINCT `emails`.`to`,`emails`.`from` as fromEmail 
FROM `emails` WHERE ((`emails`.`from` = '".$loggedMember->id."') 
OR (`emails`.`to` = '".$loggedMember->id."')) 
AND (`emails`.`to` != 0) ORDER BY `id` DESC LIMIT 4"

そして、次の結果を取得します。

to    fromEmail
887   1923
1923  887
1637  887
370   887

質問: 最初の 2 つの意味での値の繰り返しを避けるにはどうすればよいですか。逆の場合でも、"887 1923" と "1923 887" が繰り返されていると見なされます。

4

1 に答える 1

2

値の繰り返しをなくすには、電子メールを正規の順序で並べる必要があります。

SELECT DISTINCT
       (case when `emails`.`to` < `emails`.`from` then `emails`.`to`
             else `emails`.`from`
        end) as email1,
       (case when `emails`.`to` >= `emails`.`from` then `emails`.`to`
             else `emails`.`from`
        end) as email2
FROM `emails`
WHERE ((`emails`.`from` = '".$loggedMember->id."')  OR (`emails`.`to` = '".$loggedMember->id."')) AND (`emails`.`to` != 0)
ORDER BY `id` DESC LIMIT 4

フィールドが NULL になる可能性がある場合、ロジックはもう少し複雑になりますが、それでも同じ考えになります: 個別の処理を行う前に、値を特定の順序で並べ替えるということです。

于 2012-08-21T21:59:21.453 に答える