2011-08-08 42 views
1

Mysqlでは、FIND_IN_SETがセット内の値を見つけるために使用されます。私はFIND_IN_SETをSQLiteで試しましたが、SQLキーワードではありません。私はグーグルではあるが、私は答えを得ていない。もし誰かが知っていれば、FIND_IN_SETの代わりにSQLiteを教えてください。SQLiteのFIND_IN_SETの代わりに?

+1

の代替などの休止状態、使用中の

基準は、あなたはそれはあなたのデータベース構造に問題があることを意味します)(FIND_IN_SETを使用する必要性を感じるとき。テーブルを正規化してみてください。 –

+1

@nick FIND_IN_SET()は単なる関数であり、多くのシナリオで使用できます。 – Karolis

答えて

9

あなたは、あなたがLIKE句を使用することができ、むしろインデックスよりちょうど真/偽の値が必要な場合:

(',' || column_name || ',') LIKE '%,value,%' 
+0

これを使ってインデックス値を取得できますか?これは真偽値だけを取得することですか? –

+0

インデックスからインデックス値を取得するクエリを教えてもらえますか? –

+0

@ Balaji53444はい、true/false値のみを返します。 – Karolis

4

を私たちは休止状態criteareaに変更のようなクエリを書くことができます

私の古いクエリ

select * FROM game_detail WHERE content_id=176 and FIND_IN_SET(12,group_master_id) 

新しいクエリ

select * 
    FROM game_detail 
WHERE content_id=176 
    and (group_master_id LIKE '%12,%'|| group_master_id LIKE '%,12,'|| group_master_id LIKE '%12') 
0

これは私の古いクエリ

文字列のクエリ= content_masterから」 + "をa.content_id、a.content_name、a.image_name、a.image_path、a.rating、d.content_type_nameを選択" で、Bをcategory_content_mapping、 game_detailのC、content_type_masterのD "+ "" + "ここでa.content_id = b.content_id" + "とc.content_id = a.content_id" + "とa.content_type_id = d.content_type_id" +" とa.is_active = 'Y'、b.is_active = 'Y'、およびb.is_active = ''は、とc.is_active = 'Y' " + "b.content_mapping_idによる注文DESC制限0,3"; FIND_IN_SET

Session session=new Configuration().configure().buildSessionFactory().openSession(); 
    Criteria criteria=session.createCriteria(ContentMaster.class); 
    criteria.setFetchMode("CategoryContentMapping", FetchMode.JOIN); 
    criteria.setFetchMode("GameDetail", FetchMode.JOIN); 
    criteria.createAlias("categoryContentMappings","cat"); 
    criteria.createAlias("contentTypeMaster", "ctm"); 
    criteria.createAlias("gameDetails","game"); 
    criteria.add(Restrictions.eq("cat.categoryMaster.categoryMasterId", 9)); 

    criteria.add(Restrictions.disjunction() 
    .add(Restrictions.like("game.groupMasterId","%12,%")) 
    .add(Restrictions.like("game.groupMasterId","%,12,%")) 
    .add(Restrictions.like("game.groupMasterId","%12%"))); 
    criteria.add(Restrictions.eq("isActive", "y")); 
    criteria.add(Restrictions.eq("cat.isActive", "y")); 
    criteria.add(Restrictions.eq("ctm.isActive", "y")); 
    criteria.addOrder(Order.desc("cat.contentMappingId")); 
関連する問題