【发布时间】:2013-08-23 11:19:48
【问题描述】:
假设我有 4 张桌子'A(id, type, protocol), B(id, A_id, info), C(id, B_id, details) and D(id, C_id, port_info)。表A 和表B 通过表A 中的外键id 和表B 中的A_id 连接。同样,表B和表C通过表B中的外键id和表C中的B_id连接起来,同理,表C和表D是也已连接。
现在,我想从表D 中获取port_info,而不是表A 中的所有protocols。
我知道一种时间复杂度为O(n^4) 的方法,我目前正在使用该方法。方法如下:
db = MySQLdb.connect(host="localhost", user="root", passwd="", db="mydb")
cur = db.cursor()
cur.execute("SELECT * FROM A")
A_results = cur.fetchall()
for A_row in A_results :
id = A_row[0]
cur.execute("SELECT * FROM B WHERE A_id = %d " % (id ))
B_results = cur.fetchall()
for B_row in B_results :
id = B_row[0]
cur.execute("SELECT * FROM C WHERE B_id = %d " % (id ))
c_results = cur.fetchall()
for C_row in C_results :
id = C_row[0]
cur.execute("SELECT * FROM D WHERE C_id = %d " % (id ))
D_results = cur.fetchall()
for D_row in D_results :
print "Port = " + str(port)
但是这个方法需要O(n^4),那么有没有关于time complexity的有效方法可以解决这个问题。
我们非常感谢您的建议。
【问题讨论】:
-
MySQL(或任何 SQL)101。见 JOIN。
标签: python mysql database mysql-python time-complexity