MySQL查询子查询或分组

时间:2012-10-30 20:39:47

标签: mysql subquery

每个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表中的任何内容。

2 个答案:

答案 0 :(得分:1)

因此,您需要返回modx_site_tmplvar_contentvalues表中tmplvarid表中{1}}的所有行,这两行都与同一modx_site_content相关,但仅限于tmplvarid 3行将来会有一个日期时间字段吗?

我会对modx_site_tmplvar_contentvalues tabe进行两次单独的连接:

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

答案 1 :(得分: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