2011-12-03 18 views
-1

の特定の部分は、私は疑問に思う:クエリカンマ区切りの文字列

$results = mysql_query("SELECT * FROM table1 WHERE $pid=table1.recordA[2] ",$con); 

$pidは数

で、 recordAは私が第三の部分を確認したい

34,9008,606,,416,2 

などのデータが含まれています(606)

ありがとうございました

+0

$ pidはフィールド名の場所ですなぜデフォルトを変更する –

答えて

0

カンマ区切りリストやmySQLフィールド内のデータ区切りを使用すると、悪い習慣ができます。

mySQLフィールド内の区切りリストの要素を照会するのではなく、フィールドをそれ自身のテーブルに分割し、隣接リストを作成してtable1とそれに関連する変数の1:many関係を作成することを検討してください。

あなたがこのルートにコミットした場合、最も簡単な方法は、mySQLが抽出したいデータをドリルダウンするための非常に少数のツール(正規表現/テキスト検索以上)を持っているためPHPを使用することです。 $results = explode(',',$query);は、返されたフィールドから変数の配列を作成し、必要に応じて多くの条件チェックを実行できます。

しかし、これをあなたの「再書込み/再考の必要性」リストに追加することを検討してください。リレーショナルテーブル構造を使用すると、データベースに$pidの値を直接クエリすることができ、それ自身のフィールドにリンクされてリンクされます。

区切り付き変数リストが中間長であるか問題のより良い解決策を見つけるために、mySQLのDirected Acyclic Graphに関する情報については、stackoverflowの検索をお勧めします。

このスクリプトの性質や意図した目的を知らなくても、私はこれ以上は詳しく答えることができません。これが少し助けてくれることを願っています。

+0

私は新しいテーブルを作るでしょう、データ。ご協力ありがとうございました。 –

0

これはどう:

SELECT * FROM table1 WHERE FIND_IN_SET({$pid}, recordA) = 3 

インデックスRECORDAに確認してください。私は次の男のように正規化が大好きですが、時にそれを分解することは価値があるよりも面倒です;)

+0

はい、動作します。どうもありがとうございました... –

関連する問題