2016-09-29 5 views
-2

私はテーブルcol1、col2、col3に2つのautocomplettextviewと3つのカラムを持っています。 col1の主キーSQLite:複数の値を検索するにはどうすればよいですか?

テーブルは次のようになりさ:

Q1:私はどのように私は保存することができませ単一column.Ifに複数の値を保存することはできません

| 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  | 

は、私は2つの質問がありますか?

Q2:以前、私はこれらの2つのテキストと一致する 表示行に必要なユーザタイプのリンゴやパイナップル場合、私は2 autocompletetextview

すなわちを検索するには、2つのautocompletetextview:

を持っていると述べました。

| col1 | col2 | col3     | 
----------------------------------------- 
| 1 | store1 |apple,pineapple,mango | 
| 2 | store3 | apple,pineapple,orange| 

どのように私はこれを達成することができます

は、p/oを期待しますか?

私は私が1列に複数の値を格納することができforeign keyの助けを借りて、いくつかのreseachesを経て、どのように私はexpected o/pを達成するためにWhere clause外部キーを使用することができます。

+1

のようなものです...あなたはあなたのために+ https://en.wikipedia.org/wiki/Database_normalization – Selvin

+1

テーブルを結合することができます最初の質問は2つのテーブルを作成し、単にそれらに参加する必要があります! –

+0

2つの質問がある場合、plsは別の投稿でそれらを尋ねます。 – Shadow

答えて

1

同じ列に複数の値を格納しないでください。代わりに、3つのテーブルを使用する必要があります。

はその後、両方の食べ物を持って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 | 

FoodAvailable

| 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 

最終的なクエリは、いくつかのSQL基礎を学ぶしてください。この

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 
+0

お返事ありがとうございます。私はユーザーの検索に従って表示する必要がありますどのように我々はIN演算子@元を使用することができます – madhushri

+0

更新を確認.... –

+0

ユーザーはオートコンプリート・ビュー内の何かを検索することができますどのようにIN演算子でリンゴ、パイナップルを入力できます。ユーザーはオレンジ、リンゴ、または他の組み合わせを入力することもできます@Juan – madhushri

関連する問題