我正在设置有关包裹预订系统的应用程序,我需要选择一个特定包裹并将其标记为收藏夹,但希望该收藏夹保存选择该包裹的用户和该包裹所选择的包裹的数据。< / p>
我在数据库上用名称收藏夹创建了一个表,并给了3个字段名称fav_id(pk),package_id(package,pk)和user_id(user,pk),我想将两个表数据即user和用户选择的包,我知道加入将使它变得容易得多,但我有点困惑如何在“收藏夹”表中加入用户名和包名。
SELECT favorite_package.pid, favorite_package.user_id,
users.user_id,users.username, package.pid,package.name FROM package JOIN
package ON favorite_package.user_id= users.user_id;
进行会话并且用户单击某个软件包时登录该页面时,他们应该可以选择将该软件包标记为他的收藏夹,方法是将它们标记并发送到另一个将软件包标记为他的收藏夹的页面。
>答案 0 :(得分:1)
类似这样的事情...(没有提供完整的表结构,因此这是一种近似的解决方案)
def _search(self):
if self.inputBox.text() != '':
srchRes = json.load(urllib.request.urlopen('http://www.omdbapi.com/?apikey=2ee068f3&s='+self.inputBox.text().replace(" ", "%20")))
if srchRes['Response'] == 'True':
self.info.hide()
self.title1.show()
self.title1.setText(srchRes['Search'][0]['Title'] + ' (' + srchRes['Search'][0]['Type'].capitalize() + ' ' + srchRes['Search'][0]['Year'] + ')')
self.sel1.show()
if int(srchRes['totalResults']) > 1:
self.title2.show()
self.title2.setText(srchRes['Search'][1]['Title'] + ' (' + srchRes['Search'][1]['Type'].capitalize() + ' ' + srchRes['Search'][1]['Year'] + ')')
self.sel2.show()
else:
self.title2.hide()
self.sel2.hide()
self.title3.hide()
self.sel3.hide()
self.title4.hide()
self.sel4.hide()
self.title5.hide()
self.sel5.hide()
self.title6.hide()
self.sel6.hide()
self.title7.hide()
self.sel7.hide()
self.title8.hide()
self.sel8.hide()
self.title9.hide()
self.sel9.hide()
self.title10.hide()
self.sel10.hide()
self.gridLayout.setGeometry(QtCore.QRect(20, 80, 560, 50))
Dialog.resize(600, 150)
return
if int(srchRes['totalResults']) > 2:
self.title3.show()
self.title3.setText(srchRes['Search'][2]['Title'] + ' (' + srchRes['Search'][2]['Type'].capitalize() + ' ' + srchRes['Search'][2]['Year'] + ')')
self.sel3.show()
else:
self.title3.hide()
self.sel3.hide()
self.title4.hide()
self.sel4.hide()
self.title5.hide()
self.sel5.hide()
self.title6.hide()
self.sel6.hide()
self.title7.hide()
self.sel7.hide()
self.title8.hide()
self.sel8.hide()
self.title9.hide()
self.sel9.hide()
self.title10.hide()
self.sel10.hide()
self.gridLayout.setGeometry(QtCore.QRect(20, 80, 560, 100))
Dialog.resize(600, 200)
return
if int(srchRes['totalResults']) > 3:
self.title4.show()
self.title4.setText(srchRes['Search'][3]['Title'] + ' (' + srchRes['Search'][3]['Type'].capitalize() + ' ' + srchRes['Search'][3]['Year'] + ')')
self.sel4.show()
else:
self.title4.hide()
self.sel4.hide()
self.title5.hide()
self.sel5.hide()
self.title6.hide()
self.sel6.hide()
self.title7.hide()
self.sel7.hide()
self.title8.hide()
self.sel8.hide()
self.title9.hide()
self.sel9.hide()
self.title10.hide()
self.sel10.hide()
self.gridLayout.setGeometry(QtCore.QRect(20, 80, 560, 150))
Dialog.resize(600, 250)
return
if int(srchRes['totalResults']) > 4:
self.title5.show()
self.title5.setText(srchRes['Search'][4]['Title'] + ' (' + srchRes['Search'][4]['Type'].capitalize() + ' ' + srchRes['Search'][4]['Year'] + ')')
self.sel5.show()
else:
self.title5.hide()
self.sel5.hide()
self.title6.hide()
self.sel6.hide()
self.title7.hide()
self.sel7.hide()
self.title8.hide()
self.sel8.hide()
self.title9.hide()
self.sel9.hide()
self.title10.hide()
self.sel10.hide()
self.gridLayout.setGeometry(QtCore.QRect(20, 80, 560, 200))
Dialog.resize(600, 300)
return
if int(srchRes['totalResults']) > 5:
self.title6.show()
self.title6.setText(srchRes['Search'][5]['Title'] + ' (' + srchRes['Search'][5]['Type'].capitalize() + ' ' + srchRes['Search'][5]['Year'] + ')')
self.sel6.show()
else:
self.title6.hide()
self.sel6.hide()
self.title7.hide()
self.sel7.hide()
self.title8.hide()
self.sel8.hide()
self.title9.hide()
self.sel9.hide()
self.title10.hide()
self.sel10.hide()
self.gridLayout.setGeometry(QtCore.QRect(20, 80, 560, 250))
Dialog.resize(600, 350)
return
if int(srchRes['totalResults']) > 6:
self.title7.show()
self.title7.setText(srchRes['Search'][6]['Title'] + ' (' + srchRes['Search'][6]['Type'].capitalize() + ' ' + srchRes['Search'][6]['Year'] + ')')
self.sel7.show()
else:
self.title7.hide()
self.sel7.hide()
self.title8.hide()
self.sel8.hide()
self.title9.hide()
self.sel9.hide()
self.title10.hide()
self.sel10.hide()
self.gridLayout.setGeometry(QtCore.QRect(20, 80, 560, 300))
Dialog.resize(600, 400)
return
if int(srchRes['totalResults']) > 7:
self.title8.show()
self.title8.setText(srchRes['Search'][7]['Title'] + ' (' + srchRes['Search'][7]['Type'].capitalize() + ' ' + srchRes['Search'][7]['Year'] + ')')
self.sel8.show()
else:
self.title8.hide()
self.sel8.hide()
self.title9.hide()
self.sel9.hide()
self.title10.hide()
self.sel10.hide()
self.gridLayout.setGeometry(QtCore.QRect(20, 80, 560, 350))
Dialog.resize(600, 450)
return
if int(srchRes['totalResults']) > 8:
self.title9.show()
self.title9.setText(srchRes['Search'][8]['Title'] + ' (' + srchRes['Search'][8]['Type'].capitalize() + ' ' + srchRes['Search'][8]['Year'] + ')')
self.sel9.show()
else:
self.title9.hide()
self.sel9.hide()
self.title10.hide()
self.sel10.hide()
self.gridLayout.setGeometry(QtCore.QRect(20, 80, 560, 400))
Dialog.resize(600, 500)
return
if int(srchRes['totalResults']) > 9:
self.title10.show()
self.title10.setText(srchRes['Search'][9]['Title'] + ' (' + srchRes['Search'][9]['Type'].capitalize() + ' ' + srchRes['Search'][9]['Year'] + ')')
self.sel10.show()
self.gridLayout.setGeometry(QtCore.QRect(20, 80, 560, 500))
Dialog.resize(600, 600)
else:
self.title10.hide()
self.sel10.hide()
self.gridLayout.setGeometry(QtCore.QRect(20, 80, 560, 450))
Dialog.resize(600, 550)
return
else:
self.title1.hide()
self.sel1.hide()
self.title2.hide()
self.sel2.hide()
self.title3.hide()
self.sel3.hide()
self.title4.hide()
self.sel4.hide()
self.title5.hide()
self.sel5.hide()
self.title6.hide()
self.sel6.hide()
self.title7.hide()
self.sel7.hide()
self.title8.hide()
self.sel8.hide()
self.title9.hide()
self.sel9.hide()
self.title10.hide()
self.sel10.hide()
Dialog.resize(600, 100)
else:
self.title1.hide()
self.sel1.hide()
self.title2.hide()
self.sel2.hide()
self.title3.hide()
self.sel3.hide()
self.title4.hide()
self.sel4.hide()
self.title5.hide()
self.sel5.hide()
self.title6.hide()
self.sel6.hide()
self.title7.hide()
self.sel7.hide()
self.title8.hide()
self.sel8.hide()
self.title9.hide()
self.sel9.hide()
self.title10.hide()
self.sel10.hide()
Dialog.resize(600, 100)
答案 1 :(得分:-1)
JOIN操作数的优先级高于逗号(操作数),因此联接被有效地视为
t1, t2, (t3, t4, t5 ON ... )
在t1,t2,t3前后加上括号。
SELECT *
FROM ( table1 AS t1, table2 AS t2, table3 AS t3 )
INNER JOIN table4 AS t4 ON t1.row3 = t4.row3
INNER JOIN table5 AS t5 ON t1.row4 = t5.row4
WHERE ...
您还可以将查询写为:
SELECT *
FROM table1 AS t1
INNER JOIN table2 AS t2
INNER JOIN table3 AS t3
INNER JOIN table4 AS t4 ON t1.row3 = t4.row3
INNER JOIN table5 AS t5 ON t1.row4 = t5.row4
WHERE ...
因为逗号等于没有连接条件的INNER JOIN。