2

次のようなものは、私がやろうとしていることです

SELECT id, status, Gid, Uid, note FROM notes LIMIT 10

ただし、ステータスIDは異なる可能性があり、次のようなものにする必要があります

SELECT a.id, a.status, a.Gid, a.Uid, a.note
FROM notes as a
WHERE
  IF(a.status < 2, DONT SELECT),
  IF(a.status == 2, 
    (SELECT approved FROM friends WHERE Uid = a.Uid AND Fid = ".$_SESSION['Uid'].") 
      IF(approved = 1, SELECT ROW, else DONT)
  )
  IF(a.status == 3, SELECT)
  IF(a.status == 4,
     (SELECT Gid FROM friends WHERE Uid = a.Uid AND Fid = ".$_SESSION['Uid'].")
     IF(Gid == a.Gid, SELECT ROW, else DONT)
ORDER BY id DESC
LIMIT 10

CASEコマンドを調べましたが、その使い方がわかりませんが、それがその方法であることはわかりますが、ええ..方法がわかりません。上記は私がやろうとしていることの例です。a.Uid は異なる ID である可能性があるため、ステータス == 2 または 4 の場合、表示しているユーザーが承認された友人であるか、groupId (Gid )

このクエリを修正するための助けをいただければ幸いです。まだ本番環境にないため、必要に応じてメモ テーブルを少し変更できますが、お勧めしません。私は提案を受け入れます

前もって感謝します!

4

1 に答える 1

2

私はこれがあなたが望むことをすると思います:

select a.id, a.status, a.Gid, A.Uid, a.note
FROM notes a
LEFT JOIN friends f ON f.Uid = a.Uid AND f.Fid = $_SESSION[Uid]
WHERE (a.status = 2 AND f.approved = 1)
OR a.status = 3
OR (a.status = 4 AND f.Gid = a.Gid)
ORDER BY a.id DESC
LIMIT 10
于 2012-11-03T02:56:31.197 に答える