sql >> データベース >  >> RDS >> Mysql

MySQLはフィールドで1,2,3,11,22,33を検索します

    まず、フィールドでカンマ区切りの値を使用するのは問題があるため、代わりにそれらを個別のテーブルに格納することを検討する必要があります。そうすれば、レコードをより効率的に取得できます。

    select ...
    from mainTable t
    inner join valueTable v1 on v1.id = t.id and v1.value = 1
    inner join valueTable v2 on v2.id = t.id and v2.value = 2
    inner join valueTable v3 on v3.id = t.id and v3.value = 3
    

    それが不可能な場合は、低速の文字列照合を行う必要があります。カンマ区切りの文字列の値を一致させるには、likeを使用できます 演算子:

    ... where
      concat(',', someField, ',') like '%,1,%' and
      concat(',', someField, ',') like '%,2,%' and
      concat(',', someField, ',') like '%,3,%'
    

    検索された値の両側に区切り文字を配置すると、誤検知が発生しないようになります。フィールド値の前後にコンマを追加すると、最初と最後の値を確実に見つけることができます。



    1. MySQL自己結合クエリを最適化する

    2. SQLAlchemy:2つの列のいずれかをチェックするための制約がnullではありませんか?

    3. PHP:mysql_fetch_array()は、パラメーター1がリソースであり、ブール値が指定されていることを想定しています。

    4. 私はsqliteからデータを取得してBaseAdapterにデータを表示するAndroidアプリを持っています..最良の方法は何ですか?