Справка по сложным запросам SQLite - PullRequest
0 голосов
/ 21 июля 2010

У меня очень сложный запрос в 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, затем, если он возвращает ItemID, это должен быть ПЕРВЫЙ ItemID, а НЕ ПОСЛЕДНИЙ ItemID

У меня следующий 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

Любые идеи?

1 Ответ

0 голосов
/ 21 июля 2010

Предполагая, что вы используете целые числа для content.ItemID, и первый результат характеризуется более низким ItemID, измените запрос, чтобы включить min (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

должен сделать работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...