1

各modx_site_contentレコードには、modx_site_tmplvar_contentvaluesに複数のレコードが含まれる場合があります。

tvv.tmplvarid=3であるmodx_site_tmplvar_contentvalues.valueとtvv.tmplvarid=1の両方を取得する必要があります。tvv.tmplvaridが将来の日付である場合、コンマで区切られたtvv.tmplvarid3の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

したがって、1と3の両方が同じに関連しているmodx_site_tmplvar_contentvaluesテーブルの両方の行のタグを返す必要がありますが、 3つの行に将来の日時フィールドがある場合に限り ますか?tmplvaridmodx_site_contenttmplvarid

modx_site_tmplvar_contentvaluesタブに2つの別々の結合を行います。

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 に答える