fbニュースフィードのように実装したいのですが、次のことを行いましたが、その種のデータを取得するためのクエリはどうあるべきかわかりません
私はこれらのテーブルを持っています
TABLE:posts ユーザーのステータスを保存するために使用されるこのテーブルpost_idはAIであり、プライマリユーザー名はユーザー共有のユーザーIDです。公開されている場合はすべてのユーザーに共有可能であるか、ユーザーのリストと共有されている場合は、共有ファイルにそのリストのshare_idが含まれます。 。
+--------------+---------------+
| col_name | col_type |
+--------------|---------------+
| post_id | INT(11) |
+--------------|---------------+
| username | VARCHAR(50) |
+--------------|---------------+
| share | VARCHAR(50) |
+--------------|---------------+
| content | TEXT |
+--------------|---------------+
TABLE:share このテーブルには、ユーザーshare_idのリストがAIであり、プライマリshare_nameが共有リストの名前です。
+--------------+---------------+
| col_name | col_type |
+--------------|---------------+
| share_id | INT(11) |
+--------------|---------------+
| username | VARCHAR(50) |
+--------------|---------------+
| share_name | VARCHAR(50) |
+--------------|---------------+
TABLE:share_membershare
このテーブルは、共有メンバーのリストを格納する
子テーブルです。
+--------------+---------------+
| col_name | col_type |
+--------------|---------------+
| smid | INT(11) |
+--------------|---------------+
| share_id | IMT(11) |
+--------------|---------------+
| username | VARCHAR(50) |
+--------------|---------------+
公開を含む、閲覧を許可したすべてのユーザーのデータを取得したい。
編集:
テーブルの投稿にもう1列追加しました
次に、このクエリを試しました
SELECT p.*, CASE p.share_type when 'public' then "1" when 'list' then if((select count(*) FROM share_member WHERE username='pratik' AND share_id=share)>="1") then "1" END AS allowed FROM posts p