控制朋友圈好友狀態可見性的資料表設計

2021-07-31 08:30:02 字數 4625 閱讀 8607

現在有這麼一張好友關係圖:

圖中連線代表了兩人互為好友(狀態相互可見),當然像不讓某好友看自己狀態,不看某好友的狀態這些功能也容易實現,實現方法後面會提到。這裡以常規的狀態相互可見作為主要**內容。

例如:高育良發表一條新狀態,而高小琴、祁同偉、李達康都點了贊。在高書記的視角下應該是這樣的:

狀態表的建立:

create

table

ifnot

exists tb_newmessage(

message varchar(50) not

null,

mid int

notnull,

uid int

notnull

)engine=innodb default charset=utf8;

使用者表的建立:

create

table

ifnot

exists tb_user(

uid int

notnull,

uname varchar(50) not

null

)engine=innodb default charset=utf8;

好友表的建立:

create

table

ifnot

exists tb_friends(

firstuid int

notnull,

seconduid int

notnull

)engine=innodb default charset=utf8;

點讚表的建立:

create

table

ifnot

exists tb_like(

uid int

notnull,

mid int

notnull

)engine=innodb default charset=utf8;

我們需要對使用者表中的使用者id加唯一索引:

alter

table tb_user add

unique(uid);

對狀態表的訊息id加主鍵索引:

alter

table tb_newmessage add

primary

key(mid);

加入使用者例項:

insert

into tb_user(uid, uname) values(100, 'gaoyuliang');

insert

into tb_user(uid, uname) values(101, 'gaoxiaoqin');

insert

into tb_user(uid, uname) values(102, 'qitongwei');

insert

into tb_user(uid, uname) values(103, 'lidakang');

insert

into tb_user(uid, uname) values(104, 'houliangping');

新增好友關係:

insert

into tb_friends values(100, 101);

insert

into tb_friends values(101, 100);

insert

into tb_friends values(100, 102);

insert

into tb_friends values(102, 100);

insert

into tb_friends values(101, 102);

insert

into tb_friends values(102, 101);

insert

into tb_friends values(100, 103);

insert

into tb_friends values(103, 100);

insert

into tb_friends values(103, 104);

insert

into tb_friends values(104, 103);

insert

into tb_friends values(102, 104);

insert

into tb_friends values(104, 102);

insert

into tb_friends values(100, 100);

insert

into tb_friends values(101, 101);

insert

into tb_friends values(102, 102);

insert

into tb_friends values(103, 103);

insert

into tb_friends values(104, 104);

可能已經發現,上面對好友關係的新增是a-b和b-a各加了一次,這是有實際含義的。可以分別表示a的狀態對b可見,b的狀態對a可見。前面提到過,這一點可以用來擴充套件不看某人,和不讓某人看的功能。

此時,高書記發表了乙個狀態:

insert
高小琴,祁同偉,李達康點贊:

insert

into tb_like values(101, 1000);

insert

into tb_like values(102, 1000);

insert

into tb_like values(103, 1000);

效果就如同上圖顯示的那樣了。

import mysqldb,sys

import random

try:

conn=mysqldb.connect(host='10.170.16.47',\

port=3306,user='',passwd ='',db ='test')

conn.autocommit(1)

cur=conn.cursor()

loginuser = 100

# 登入使用者的id

opentomeuserssql = """select seconduid from tb_friends where firstuid=""" + str(loginuser)

cur.execute(opentomeuserssql)

openlist = cur.fetchall() # 查詢到所有我可見的使用者

openlist2 = # 將可見使用者的id收集在列表中

for orow in openlist:

#for seconduid in openlist:

# print seconduid[0]

for op in openlist: # get all the open person id

getmessagesql = """select message, mid from tb_newmessage where uid="""+str(op[0])

cur.execute(getmessagesql)

mlist = cur.fetchall() # 得到乙個具體好友的所有狀態

for ms in mlist:

messcontent = ms[0] # 訊息體

getlikeuser = """select tb_user.uname,tb_user.uid from tb_like,tb_user where

tb_like.mid=""" + str(ms[1]) +""" and tb_like.uid=tb_user.uid"""

cur.execute(getlikeuser)

likelist = cur.fetchall() # 得到點讚人的暱稱和id

getopname = """select uname from tb_user where uid="""+str(op[0])

cur.execute(getopname)

opname = cur.fetchall()

print opname[0][0]+":"+ms[0]

for row in likelist:

if (row[1] in openlist2) : #點讚人是我的好友嗎

print row[0]+" like this"

cur.close()

conn.close()

except exception, e:

print e

sys.exit(0)

微信好友,朋友圈分享所遇到的坑

function catch e var url window.location.href.tostring ajax wx.ready function cancel function 分享給朋友 title wxtext,分享標題 desc 無所爭 自有聲 攝影大賽 中國國家地理 tcl 分享描...

微信分享我的好友,分享朋友圈需要注意的問題

第一部分 前端js呼叫 第一步很簡單,但是容易忘記。第二步,要看手冊最新的js版本,之前網上大部分是1.0.0.js。第三步,這裡debug最好先弄成true,開啟除錯模式,方便測試。第二部分 後台引數等設定 後台配置主要是獲得這四個引數。1.第乙個引數,是隨機字串,可以寫死,就是16位,大小寫數字...

資料結構 朋友圈問題的解決 並查集

本篇博文旨在介紹一種資料結構 並查集 本文介紹了該資料結構的使用場景,並用 進行了實現該資料結構 1 已知,有n個人和m對好友關係 存於乙個集合r中 2 如果兩個人是直接的或者間接的好友 好友的好友的好友。那麼他們屬於乙個集合,就是乙個朋友圈裡的 3 寫出程式,求這n個人中一共有多少個朋友圈 文字描...