对不起,如果这之前已经回答;我有点不确定如何最好地描述这个问题,不必介意搜索它。但在这里...MySQL子查询AND'NOT IN'
基本上我有一个'项目'表,它拥有'id'和'标题'。我还有一个'projects_history'表,当(IF)项目设置为归档(布尔值)时,该表保存信息。它有一个引用项目的'pid'键 - 每更新一个项目可以有多个记录(以便跟踪谁设置了值)。
还有一个'project_enquiries'表,它包含关于项目提出的查询的信息,所以有一个引用'项目'的'pid'键。同样,有一个'project_enquiry_history'表记录了何时(IF)查询设置为关闭(布尔值)。它有一个引用project_enquiry的'eid'键 - 每更新一个查询可以有多个记录(以便跟踪谁将值设置为什么)。
我的查询旨在提取尚未归档的项目(因此'project_history'中没有记录或项目的最近记录'archived'= 0),这些查询的查询仍然打开(所以或者'project_enquiry_history'中没有记录,或者查询的最近记录'open'= 1)。
我真的在挣扎着从哪里开始查询。
谢谢Poodlehat。这有很大的帮助,但我不确定如何找到最近的?我使用存储为INT的unix时间戳来记录日期,在'created'字段下。 – PeeBee
然后你可以在它上面执行一个MAX - 32位UNIX时间戳直到2038年才会翻转,如果这不是你的应用程序的问题。上面做'LEFT OUTER JOIN project_history ph',做一些类似'LEFT OUTER JOIN(SELECT ph.pid,MAX(ph.created)FROM project_history ph,project p WHERE P.ID = ph.pid GROUP BY pid)x ON p.id = x.pid' – Poodlehat
对不起,先回复。我刚刚尝试了您的建议,但现在我收到了存档列不存在的错误。我现在的查询是 'SELECT DISTINCT p.id FROM项目p L1EFT OUTER JOIN(SELECT ph.pid,MAX(ph.created)FROM project_history ph,projects p WHERE P.ID = ph.pid GROUP BY pid)x ON p.id = x.pid LEFT OUTER JOIN project_enquiries pe ON P.ID = pe.pid LEFT OUTER JOIN project_enquiry_history peh ON peh.eid = pe。ID WHERE( 存档IS NULL 或存档= 0 ) AND( 公开赛是NULL OR OPEN = 1 )' – PeeBee