2010-07-21 97 views
0

我有一个非常复杂的查询在SQLite中进行,我需要一些帮助来理解如何去做。SQLite复杂查询帮助

下面的例子是我的数据库:

Category: 

CatID | CatTitle 
---------------- 
    1 | XYZ 
    2 | Sample 


Content: 

ItemID | ItemCatID | ItemText | ItemText2 | ItemText3 | ItemText4 
----------------------------------------------------------------- 
    1 |  1  | Test | Bla | Sample | MoreContent 
    2 |  1  | Test2 | BlaBla | Sample2 | Other Content 
    3 |  2  | Test3 | BlaBla2 | Sample3 | Other Content2 

现在,我基本上想要做一个查询,在搜索字符串。(即“%XYZ%”与通配符),我想我不想搜索CatTitle,但也ItemText,ItemText2和ItemText3

我想返回的参数是:CatID,CatTitle,ItemID,如果可能的话,“ItemFilteredText”(可以是任何从ItemText到ItemText4,取决于其中是匹配)

继承人首先,如果这个查询匹配CatTitle,那么如果返回项ID,它应该是第一个项目ID和不是最后一个项目ID

我有以下SQL有些工作......

select DISTINCT Category.CatID, 
     Category.CatTitle, 
     Content.ItemID, 
     Content.ItemText, 
     Content.ItemText2, 
     Content.ItemText3 
from Content,Category 
where Category.CatID = Content.ItemCatID 
     AND (Category.CatTitle like'%XYZ%' 
      OR Content.ItemText like '%XYZ%' 
      OR Content.ItemText2 like '%XYZ%' 
      OR Content.ItemText3 like '%XYZ%') 
GROUP BY Category.CatTitle ORDER BY Category.CatID ASC 

它返回数据...但通过Category.CatTitle分组意味着Content.ItemID将返回2,而不是1

任何想法?

回答

0

假设你使用整数为content.ItemID和第一结果的特征在于较低的ItemID修改查询以包括分钟(Content.ItemID)

select DISTINCT Category.CatID, Category.CatTitle, min(Content.ItemID), Content.ItemText, Content.ItemText2, Content.ItemText3 from Content,Category where Category.CatID = Content.ItemCatID AND (Category.CatTitle like'%XYZ%' OR Content.ItemText like '%XYZ%' OR Content.ItemText2 like '%XYZ%' OR Content.ItemText3 like '%XYZ%') GROUP BY Category.CatTitle ORDER BY Category.CatID ASC 

应做的工作。

+0

谢谢,那是做的工作。 我想接下来的问题是如何将ItemText的值返回给单个别名下的ItemText3,如果它们匹配...(即ItemFilteredText)... 除此之外...如果CatTitle匹配,则只返回CatID& CatTitle(所有其他值应为空),否则如果从ItemText到ItemText3的任何项匹配,则返回该值作为别名(但不返回同一行的多个结果 所以它应该显示: – AAA 2010-07-22 11:41:48