現在有這麼一張好友關係圖:
圖中連線代表了兩人互為好友(狀態相互可見),當然像不讓某好友看自己狀態,不看某好友的狀態這些功能也容易實現,實現方法後面會提到。這裡以常規的狀態相互可見作為主要**內容。
例如:高育良發表一條新狀態,而高小琴、祁同偉、李達康都點了贊。在高書記的視角下應該是這樣的:
狀態表的建立:
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個人中一共有多少個朋友圈 文字描...