我正在尝试选择
行 1)list.ispublic = 1
2)userlist.userid='aaa'
和userlist.listid=list.listid
我需要1)+2)
已经有一行但是这句话不能得到那一行,有什么问题吗?
列表:
ListID ListName Creator IsRemindSub IsRemindUnSub IsPublic CreateDate LastModified Reminder
1 test2 aaa 0 0 1 2012-03-09 NULL NULL
user_list表(无行):
UserID ListID UserRights
我的测试版
SELECT *
FROM list l
INNER JOIN user_list ul ON ul.ListID = l.ListID
WHERE l.IsPublic = 1 AND ul.UserID = '09185346d'
这是结果,当user_list中有两个列表有aaa,并且列表中有一个列表是public时,如果我在php中获取它,这会导致列表中的那个公共列表的双重检索吗?
ListID ListName Creator IsRemindSub IsRemindUnSub IsPublic CreateDate LastModified Reminder UserID ListID UserRights
1 test2 aaa 0 0 1 2012-03-09 NULL aaa 1 read
2 t2 aaa 0 0 1 2012-03-09 NULL aaa 2 read
答案 0 :(得分:1)
如果您的user_list表不包含任何行,则该查询将不返回任何结果。
你想要一个LEFT JOIN。
SELECT list.col_1, list.col_2 -- etc...
FROM list
LEFT JOIN user_list ON user_list.ListID = List.ListID
WHERE list.IsPublic = 1
OR user_list.UserID = 'aaa'
答案 1 :(得分:0)
首先,尝试仅SELECT
您实际需要的字段。其次,明确地写下你的JOINS
- 它有助于提高可读性。例如:
SELECT l.*, ul.*
FROM list l
INNER JOIN user_list ul ON ul.ListID = l.ListID
WHERE l.IsPublic = 1
AND ul.UserID = 'aaa'
顺便说一句,如果您的user_list
表中没有数据,那么您无法满足您设置的要求。如果您需要“userlist.listid = list.listid”并且user_list
表为空,那么您将始终返回零行。
编辑: 不,它不会导致行被检索到两次。无论您在SQL查询中得到什么结果,都会得到与PHP脚本相同的结果 - 检索数据的机制是相同的。