2017-06-02 140 views
0

首先,对于标题感到抱歉,但我真的不知道该怎么说。 我有3个表格用于存储章节,页面和阅读。使用mysql查询检查空结果

表是...

部分

idsection 
sectiontitle 

idpage 
pagetitle 
idsection 

读取

idread 
idpage 
time 

我有一个简单的查询,列出sections像 -

SELECT * FROM sections WHERE 1; 

但我要表明如果section已经完全read,这意味着所有pages具有相同idsection已经read。我能想象的唯一方法是复杂的查询,使用php for脚本会更简单。

回答

0

尝试下面:

select * from section s where idsection not in (select page.idsection from 
page where 
page.idsection=s.idsection and idpage not in (select idpage from read)); 

我用不是因为u需要检查所有页面,而不是页面的1。 所以我们应该得到不在读的页面(未读)并且不要放在那里。

如果你有1个部分有5个页面,并且全部被读取,它会在你的主查询选择会话的子查询上给你空的结果。

如果你有1个部分有10个页面,只有9个页面被读取,它将会在子查询中给你10个页面,并使主查询中你的部分为空(不在)。

+0

我选择你的答案,因为这对我来说是最容易理解的。谢谢 – Entretoize

+0

好,主要的是,上面的查询帮助和工作? –

+0

它似乎工作,但它似乎也更简单,在我的情况下使用PHP的工作,因为我的表不是那么简单,查询太大。 – Entretoize

0

这应该工作,但它使用group by,所以您必须添加每个项目,您也想在group by中选择sections表格。

SELECT  dbo.sections.idsection, dbo.sections.sectiontitle, CASE WHEN SUM(dbo.[read].idread) IS NULL THEN 0 ELSE 1 END AS AllRead 
    FROM   dbo.page INNER JOIN 
          dbo.sections ON dbo.page.idsection = dbo.sections.idsection LEFT OUTER JOIN 
          dbo.[read] ON dbo.page.idpage = dbo.[read].idpage 
    GROUP BY dbo.sections.idsection, dbo.sections.sectiontitle