2016-08-31 8 views
1

私はMySQLの新人です。現在、次のような問題があります。分割された文字列の整数範囲で選択しますか?

私はテーブルに「オファー」を用意しています。アイテムは、ItemIDとItemLevelが「:」で区切られ、項目が「、」で区切られたデータフィールドに配置されます。

例: "0:346,2:638,1:646" は= ID 0、レベル346およびID 2レベル638とID 1つのレベル646

で項目を提供しています今、私はPHPでクエリを作成したいです特定のIDとレベルの範囲を持つオファーのみを選択します。

2つの異なるテーブル "orders"と "order_data"を使用して全体を再構築するか、単純なクエリでこのフィルタリングを可能にする必要がありますか?

+1

確実にデータモデルを修正してください。長期的には、「単純なクエリ」よりも簡単になります。 –

+1

偉大な入力をありがとう、私はあなたのポイントを参照して、それを再構築します! :) – KoalaGangsta

答えて

0

データを正規化する必要があります。言うように、複数のテーブルと列の間で注文データを配布する必要があります。それは、列に存在する場合 - - 検索文字列のインデックスを返します

SELECT * FROM orders 
WHERE 1=1 
AND FIND_IN_SET('0:346', orderData) 
; 

FIND_IN_SET機能ので、通常SELECTとして使われています:

しかし、あなたの要求のための可能な(かつ簡単)解決策があります文字列のインデックスをカンマ区切りの文字列で認識するためのフィールド。しかし、この場合のようにWHERE句では、特定の文字列を含むレコードのみを返すことができます。

+0

ありがとうこれは偉大な、有用なヒントのように見える:)しかし、私は正確に必要なものを完全にフィッティング私は正確なidsを検索する必要があるので、範囲のレベル。 ;) – KoalaGangsta

+0

その場合は、DBモデルを再構築してください:)これは最適なソリューションです。 乾杯。 –

関連する問題