2010-07-21 4 views
0

У меня очень сложный запрос в SQLite, и мне нужно немного понять, как это сделать.SQLite Complex Query Help

Следующий пример из моей базы данных:

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, в зависимости от на котором находится матч)

Heres the вещь, если запрос соответствует 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 

Она возвращает данные ... но группировка по категориям. 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