2017-02-28 8 views
0

私はキャンプサイトをデータベースリストに持っています 名前、座標、住所などのユニークなデータを含むメインテーブルtblSitesがあり、トイレ、これらは=はい、ヌル=何 これが含まれている別の関連テーブルtblLocationsがあり、水= 1とトイレ= 1データベースデザイン - JSONを使用して情報を保存

tblSites FROM

SELECT IDのようなものでちょうど1検索されないであろうが、電気など場所タイプ(すなわち、海、田舎、山、川などの近く) これは、テーブルには多くの列があり、f新しいカテゴリを追加したい場合は簡単に更新できます。 これはM.ID = L.ID WHERE M.water = 1、L.river ON L AS tblLocationのJOIN M LEFT AS tblSites FROMこの

SELECT M.id、L. *などの検索に含まれることになります= 1

私が検討しているのは、列を追加することです。たとえば、施設の番号が数字のキーとしてjson文字列を含むようにします。[1,3,4,12]数字のそれぞれは利用可能な施設を表し、別の列[1,3,5]

これは、余分な列を追加せずにテーブルサイズを減らし、施設や場所を追加することを可能にしますが、それはパフォーマンス上の賢明なアイデアですか?検索すなわち

は今( '%1、%' AND LIKE施設 '%4、%' AND '%1、%' LIKE場所LIKE施設)

tblSites FROM

SELECT IDのようなものになるだろう

フィールドに配列文字列のキー番号が含まれているかどうかを調べるのに使用できるより良いクエリはありますか?

+0

JSON型の列を 'where'条件[このドキュメントを参照](https://dev.mysql.com/doc/refman/5.7/ja/json-search-functions.html)で使用して' JSON_CONTAINS' @lifeson – MohaMad

+1

あなたは悪い状況をさらに悪化させています。 1対多のリレーションを適切な1対多のリレーションとしてモデル化します。列を分割したり、JSON文字列を含めることはできません。 –

答えて

-1

あなたのmySqlバージョンがあなたのものであれば、JSONデータタイプを使用できます。あなたはmyslのサイトでドキュメントを見つけることができます。

0

あなたのWHERE句は、 '%1、%'のように使用してもうまく動作しません。 facilitiesが文字列(TEXTまたはvarchar ...)で、文字列json配列[2,3,12,21,300]、where facilities like '%1,%'の値を検索して'21 'と一致する場合は、where facilities like '%300,%'は決して一致しませんそれは配列を言いました!

したがって、json配列を文字列形式で検索することは拒否されます。

MySQLのバージョンが5.7.8より大きい場合は、ネイティブjsonを列の型としてJSONとしてサポートしています。

あなたは(JSON_INSERT()で)MySQLでのJSONの列にデータを格納し、あなたは最善の解決策のように再設計し、あなたのテーブル構造との関係であるWHERE JSON_CONTAINS(facilities,1)

しかしによってwhereでそれらを検索することができます@ Robbyはあなたの質問の下でコメントしました。

+0

%1、% 'は21と一致しません!カンマに注意してください。私のデータベースバージョンはJSONデータ型をサポートしていません。 JSONデータ型は、明らかに、データ型をサポートするための新しい関数を持つMySQLデータ型オプションの新機能です。これらの新機能は、利益を追加しないと追加されるのはなぜですか? – lifeson

+0

その文字列で、%1、%が'21 'と一致することを繰り返します。同様の操作をしたい場合は、文字列の先頭と末尾にカンマ区切りの値を作成して、余分な '、'を付けます。あなたの施設が "、2,7,8,21"の場合、 '%、id、%'は安全な使い方です。 – MohaMad

+0

多くの行と多くの施設と場所を持つテーブルがある場合は、施設と場所の関係を 'tblSites'に格納するために別のテーブルを使用する必要があります。このような提案や助けが必要な場合は、教えてください。 **しかし**あなたが質問で言及したようにtblSitesに施設と場所の列を使用したい場合は、あわせてお知らせください。ありがとう@リフェソン – MohaMad

関連する問題