1

每个 modx_site_content 记录在 modx_site_tmplvar_contentvalues 中可能有多个记录。

我需要同时检索 modx_site_tmplvar_contentvalues.value,其中 tvv.tmplvarid = 3 和 tvv.tmplvarid = 1。其中 tvv.tmplvarid 是未来日期,我需要返回 tvv.tmplvarid 3 的 tvv.value,它是一个逗号分隔标签列表。

此查询不返回我需要的值,我不确定如何得到我想要的。

SELECT sc.id, sc.pagetitle, tvv.value, tvv.tmplvarid, tvv.id, tvv.value
FROM modx_site_content sc
left join modx_site_tmplvar_contentvalues tvv on tvv.contentid = sc.id
where published = '1' 
and (tvv.tmplvarid = '3' and tvv.value >= curdate())
order by sc.id;

基本上最后我只需要返回标签列表(tvv.tmplvarid = 3),其中其他关联记录(tvv.tmplvarid = 1)是未来的日期。

任何想法,这可以通过分组来完成吗?我实际上不需要 modx_site_content 表中的任何内容。

4

2 回答 2

1

因此,您需要返回modx_site_tmplvar_contentvalues表中具有tmplvarid1 和 3 的两行的标签都与相同的相关modx_site_content,但只有当 tmplvarid3 行将来有一个 datetime 字段时?

我会对 modx_site_tmplvar_contentvalues 表做两个单独的连接:

SELECT tOne.value, tThree.value
FROM modx_site_tmplvar_contentvalues tOne
INNER JOIN modx_site_content c ON tOne.contentid = c.id
INNER JOIN modx_site_tmplvar_contentvalues tThree ON tThree.contentid = c.id
WHERE c.published = 1
AND tOne.tmplvarid = 1 
AND tThree.tmplvarid = 3 AND tThree.date > NOW()

SQL 小提琴: http ://sqlfiddle.com/#!2/a4031/2

于 2012-11-03T18:00:10.830 回答
0

我想到了。如果您只是阅读文档,您可以做什么令人惊奇;)

select tv.contentid, tv.value as eventdate, sc.id, sc.pagetitle, tvv.value from 
(   
 select * from modx_site_tmplvar_contentvalues cv 
 where cv.tmplvarid = 3
 and cv.value >= curdate() 
) as tv  
left join modx_site_content sc on sc.id = tv.contentid
left join modx_site_tmplvar_contentvalues tvv on tvv.contentid = sc.id
where (tvv.tmplvarid = 1)
order by value asc
于 2012-11-03T17:48:01.470 回答