使用 CAML 查询可以实现这种逻辑吗?
Is this kind of logic possible using CAML Queries?
我对 CAML 查询相当有经验,但是这个让我卡住了。我需要一些帮助来构建查询的逻辑。
我需要的是 return 每条包含两列两个单词的记录。
示例(return 这些):
- 第 1 列:word1,第 2 列:word2。 //Return这条记录
- 列 1:word2,列 2:word1。 //Return这条记录
- 列 1:word2 word1,列 2:(空)。 //Return这条记录
- 第 1 列:(空),第 2 列:word2 word1。 //Return这条记录
示例(不要return这些):
- 第 1 列:(空),第 2 列:word1。 // 不要return这条记录
- 列 1:word1,列 2:(空)。 // 不要return这条记录
- 第 1 列:(空),第 2 列:word2。 // 不要return这条记录
- 列 1:word2,列 2:(空)。 // 不要return这条记录
- 第 1 列:(空),第 2 列:(空)。 // 不要return这条记录
将逻辑放在 sudo 代码中:
if( ("word1" 出现在 'Column1' OR "word1" 出现在 'Column2') AND ("word2" 出现在 'Column1' OR "word2" 出现在 'Column2') )
我尝试了不同的查询变体,但它们没有 return 令人满意的结果。例如,如果 word1 出现在 Column1 中,即使 word2 没有出现在任何地方,下面的也总是 return 一条记录。
<Query>
<Where>
<Or>
<Contains>
<FieldRef Name="Column1"/><Value Type="Text">word1</Value>
</Contains>
<And>
<Contains>
<FieldRef Name="Column2"/><Value Type="Text">word1</Value>
</Contains>
<Or>
<Contains>
<FieldRef Name="Column1"/><Value Type="Text">word2</Value>
</Contains>
<Contains>
<FieldRef Name="Column2"/><Value Type="Text">word2</Value>
</Contains>
</Or>
</And>
</Or>
</Where>
P.S。我在 SharePoint 2007 中使用 SPServices
感谢 spservices.codeplex.com 上的 spevilgenius,这对我有用:
<And>
<Or>
<Contains>
<FieldRef Name="Column1"/><Value Type="Text">word1</Value>
</Contains>
<Contains>
<FieldRef Name="Column2"/><Value Type="Text">word1</Value>
</Contains>
</Or>
<Or>
<Contains>
<FieldRef Name="Column1"/><Value Type="Text">word2</Value>
</Contains>
<Contains>
<FieldRef Name="Column2"/><Value Type="Text">word2</Value>
</Contains>
</Or>
</And>
我对 CAML 查询相当有经验,但是这个让我卡住了。我需要一些帮助来构建查询的逻辑。 我需要的是 return 每条包含两列两个单词的记录。
示例(return 这些):
- 第 1 列:word1,第 2 列:word2。 //Return这条记录
- 列 1:word2,列 2:word1。 //Return这条记录
- 列 1:word2 word1,列 2:(空)。 //Return这条记录
- 第 1 列:(空),第 2 列:word2 word1。 //Return这条记录
示例(不要return这些):
- 第 1 列:(空),第 2 列:word1。 // 不要return这条记录
- 列 1:word1,列 2:(空)。 // 不要return这条记录
- 第 1 列:(空),第 2 列:word2。 // 不要return这条记录
- 列 1:word2,列 2:(空)。 // 不要return这条记录
- 第 1 列:(空),第 2 列:(空)。 // 不要return这条记录
将逻辑放在 sudo 代码中:
if( ("word1" 出现在 'Column1' OR "word1" 出现在 'Column2') AND ("word2" 出现在 'Column1' OR "word2" 出现在 'Column2') )
我尝试了不同的查询变体,但它们没有 return 令人满意的结果。例如,如果 word1 出现在 Column1 中,即使 word2 没有出现在任何地方,下面的也总是 return 一条记录。
<Query>
<Where>
<Or>
<Contains>
<FieldRef Name="Column1"/><Value Type="Text">word1</Value>
</Contains>
<And>
<Contains>
<FieldRef Name="Column2"/><Value Type="Text">word1</Value>
</Contains>
<Or>
<Contains>
<FieldRef Name="Column1"/><Value Type="Text">word2</Value>
</Contains>
<Contains>
<FieldRef Name="Column2"/><Value Type="Text">word2</Value>
</Contains>
</Or>
</And>
</Or>
</Where>
P.S。我在 SharePoint 2007 中使用 SPServices
感谢 spservices.codeplex.com 上的 spevilgenius,这对我有用:
<And>
<Or>
<Contains>
<FieldRef Name="Column1"/><Value Type="Text">word1</Value>
</Contains>
<Contains>
<FieldRef Name="Column2"/><Value Type="Text">word1</Value>
</Contains>
</Or>
<Or>
<Contains>
<FieldRef Name="Column1"/><Value Type="Text">word2</Value>
</Contains>
<Contains>
<FieldRef Name="Column2"/><Value Type="Text">word2</Value>
</Contains>
</Or>
</And>