0

2 つの同一の SQL クエリがあり、結果をマージしたいと考えています。最初のものは次のとおりです。

SELECT USER.USER_ID, NAME, SURNAME, EMAIL, STATUS, PHOTO 
FROM FRIENDLIST, USER, USER_PROFILE 
WHERE FRIENDLIST.USER_ID=". $userID ." 
  AND APPROVED='YES' 
  AND USER.USER_ID=FRIENDLIST.USER_ID 
  AND USER.USER_ID=USER_PROFILE.USER_ID

2 つ目は次のとおりです。

SELECT USER.USER_ID, NAME, SURNAME, EMAIL, STATUS, PHOTO 
FROM FRIENDLIST, USER, USER_PROFILE 
WHERE FRIENDLIST.FRIEND_ID=". $userID ."
  AND APPROVED='YES' 
  AND USER.USER_ID=FRIENDLIST.USER_ID 
  AND USER.USER_ID=USER_PROFILE.USER_ID

ユニオンを試してみましたが、たとえば $userID=2 の場合、2 行ではなく空の結果が得られます。

SELECT USER.USER_ID, NAME, SURNAME, EMAIL, STATUS, PHOTO
FROM FRIENDLIST, USER, USER_PROFILE 
WHERE FRIENDLIST.USER_ID=". $userID ." 
  AND APPROVED='YES' 
  AND USER.USER_ID=FRIENDLIST.USER_ID 
  AND USER.USER_ID=USER_PROFILE.USER_ID 
UNION
SELECT USER.USER_ID, NAME, SURNAME, EMAIL, STATUS, PHOTO 
FROM FRIENDLIST, USER, USER_PROFILE
WHERE FRIENDLIST.FRIEND_ID=". $userID ." 
  AND APPROVED='YES' 
  AND USER.USER_ID=FRIENDLIST.USER_ID 
  AND USER.USER_ID=USER_PROFILE.USER_ID

何か案は??

4

1 に答える 1

0

私は次のようにそれらを組み合わせます:

SELECT USER.USER_ID, NAME, SURNAME, EMAIL, STATUS, PHOTO 
FROM FRIENDLIST, USER, USER_PROFILE 
WHERE (FRIENDLIST.USER_ID=". $userID ." or FRIENDLIST.FRIEND_ID=". $userID .")
  AND APPROVED='YES' 
  AND USER.USER_ID=FRIENDLIST.USER_ID 
  AND USER.USER_ID=USER_PROFILE.USER_ID

まあ、厳密にはそうではありません。結合には適切な構文を使用し、テーブルには短いエイリアスを使用します。

SELECT u.USER_ID, NAME, SURNAME, EMAIL, STATUS, PHOTO 
FROM FRIENDLIST f join
     USER u
     on u.USER_ID = f.USER_ID  join
     USER_PROFILE up
     on u.USER_ID = up.USER_ID
WHERE (f.USER_ID=". $userID ." or f.FRIEND_ID=". $userID .") and
      APPROVED='YES'

これunionは、同じことを行うための効率の悪い別の方法です。結果セットが空の場合は、条件に一致するものがないためです。

于 2013-03-03T19:46:37.163 に答える