SQLite:如何搜索多个值?
SQLite: How do I search multiple values?
我的 table col1、col2、col3 中有两个自动完成文本视图和 3 列。 col1 是主键
table 看起来像这样:
| col1 | col2 | col3 |
-----------------------------------------
| 1 | store1 |apple,pineapple,mango |
| 2 | store2 | apple,orange |
| 3 | store3 | apple,pineapple,orange|
| 4 | store4 | orange,mango |
| 5 | store5 | mango,jackfruit |
我有两个问题:
Q1: 我可以在单个中存储多个值吗column.If 不,我该如何存储?
Q2: 之前说过我有两个autocompletetextview要搜索
即:
如果用户在 two autocompletetextview 中输入苹果和菠萝,那么我需要
显示匹配这两个文本的行。
预计o/p:
| col1 | col2 | col3 |
-----------------------------------------
| 1 | store1 |apple,pineapple,mango |
| 2 | store3 | apple,pineapple,orange|
我怎样才能做到这一点?
我进行了几次研究,在 foreign key
的帮助下,我可以在单个列中存储多个值,但是如何在 [=13] 中使用 外键 =]实现expected o/p
.
您不应在同一列中存储多个值。相反,您应该使用三个表。
然后很容易找到什么StoreID有这两种食物
SELECT FoodAvailable.StoreID
FROM FoodAvailable
JOIN Foods
ON FoodAvailable.FoodID = Foods.FoodID
WHERE Foods.Food in ('apple', 'pineapple')
GROUP BY FoodAvailable.StoreID
HAVING count(*) = 2
商店
| StoreID | StoreName |
-----------------------
| 1 | store1 |
| 2 | store2 |
| 3 | store3 |
| 4 | store4 |
| 5 | store5 |
食物
| FoodID | Food |
-----------------------
| 1 | apple |
| 2 | pineapple |
| 3 | mango |
| 4 | orange |
| 5 | jackfruit |
可用食物
| StoreID | FoodID |
---------------------
| 1 | 1 | //apple
| 1 | 2 | //pineapple
| 1 | 3 | //mango
| 2 | 1 | //apple
| 2 | 4 | //orange
| 3 | 1 | //apple
| 3 | 2 | //pineapple
| 3 | 4 | //orange
| 4 | 4 | //orange
| 4 | 3 | //mango
| 5 | 3 | //mango
| 5 | 5 | //jackfruit
你的最终查询是这样的
SELECT f.StoreID, GROUP_CONCAT(food ORDER BY food DESC SEPARATOR ', ')
FROM FoodAvailable f
WHERE f.StoreID = (SELECT FoodAvailable.StoreID
FROM FoodAvailable
JOIN Foods
ON FoodAvailable.FoodID = Foods.FoodID
WHERE Foods.Food in ('apple', 'pineapple')
GROUP BY FoodAvailable.StoreID
HAVING count(*) = 2
)
GROUP BY f.StoreID
我的 table col1、col2、col3 中有两个自动完成文本视图和 3 列。 col1 是主键
table 看起来像这样:
| col1 | col2 | col3 |
-----------------------------------------
| 1 | store1 |apple,pineapple,mango |
| 2 | store2 | apple,orange |
| 3 | store3 | apple,pineapple,orange|
| 4 | store4 | orange,mango |
| 5 | store5 | mango,jackfruit |
我有两个问题:
Q1: 我可以在单个中存储多个值吗column.If 不,我该如何存储?
Q2: 之前说过我有两个autocompletetextview要搜索
即:
如果用户在 two autocompletetextview 中输入苹果和菠萝,那么我需要 显示匹配这两个文本的行。
预计o/p:
| col1 | col2 | col3 |
-----------------------------------------
| 1 | store1 |apple,pineapple,mango |
| 2 | store3 | apple,pineapple,orange|
我怎样才能做到这一点?
我进行了几次研究,在 foreign key
的帮助下,我可以在单个列中存储多个值,但是如何在 [=13] 中使用 外键 =]实现expected o/p
.
您不应在同一列中存储多个值。相反,您应该使用三个表。
然后很容易找到什么StoreID有这两种食物
SELECT FoodAvailable.StoreID
FROM FoodAvailable
JOIN Foods
ON FoodAvailable.FoodID = Foods.FoodID
WHERE Foods.Food in ('apple', 'pineapple')
GROUP BY FoodAvailable.StoreID
HAVING count(*) = 2
商店
| StoreID | StoreName |
-----------------------
| 1 | store1 |
| 2 | store2 |
| 3 | store3 |
| 4 | store4 |
| 5 | store5 |
食物
| FoodID | Food |
-----------------------
| 1 | apple |
| 2 | pineapple |
| 3 | mango |
| 4 | orange |
| 5 | jackfruit |
可用食物
| StoreID | FoodID |
---------------------
| 1 | 1 | //apple
| 1 | 2 | //pineapple
| 1 | 3 | //mango
| 2 | 1 | //apple
| 2 | 4 | //orange
| 3 | 1 | //apple
| 3 | 2 | //pineapple
| 3 | 4 | //orange
| 4 | 4 | //orange
| 4 | 3 | //mango
| 5 | 3 | //mango
| 5 | 5 | //jackfruit
你的最终查询是这样的
SELECT f.StoreID, GROUP_CONCAT(food ORDER BY food DESC SEPARATOR ', ')
FROM FoodAvailable f
WHERE f.StoreID = (SELECT FoodAvailable.StoreID
FROM FoodAvailable
JOIN Foods
ON FoodAvailable.FoodID = Foods.FoodID
WHERE Foods.Food in ('apple', 'pineapple')
GROUP BY FoodAvailable.StoreID
HAVING count(*) = 2
)
GROUP BY f.StoreID