2011-02-03 11 views
-1
これがうまくいけば、迅速なPHPの質問です

...は、PHPの配列

私は'1,2,3'のようなユーザテーブルのフィールドにIDの数を格納しているから、MySQLの結果をフィルタリングします。私は今それらの番号に対して別のテーブルを照会したい。私は今朝、私の脳が去ってしまったと思うので、それは正しいように見えないので...

「IN」をクエリに使用できますか?

アップデート - 私は私の自己を十分に説明できないことに気付きました

...

私は2つのテーブル、ユーザ(ID、ユーザ名、パスワード、製品)のための1つを持っている「製品のフィールドがありコンマ区切りのIDで、製品情報を保持する別のテーブルに関連しています。

私は基本的に、そのユーザーの権限を持つデータベースへのクエリを介して、ユーザーが見ることができるものを除外しようとしています。

+1

実際にIDを1つの列にコンマ区切りの文字列として格納していますか? – KingCrunch

+0

質問で十分ではありません –

+0

これは一般的なn:m関係であり、決してこの方法で保存しないでください。代わりに、ここで追加の関連テーブルを使用する必要があります。 – KingCrunch

答えて

1

あなたが作業しているデータの種類をあなたの質問から伝えるのは難しいかもしれません。

大量のデータを使用すると、結合がはるかに効率的になります。

データベースの構造を知らなくても、それがさらに

SELECT column_names 
FROM table_one 
INNER JOIN table_two 
ON table_one.column_name=table_two.column_name 

は基本的な構文で支援することは不可能です。

-1
$sql = "SELECT * FROM table 
WHERE id IN ("; 

$i=1; 
$count = count($array); 
foreach($array as $a){ 
if($i==$count){ 
$sql .= $a['id']; 
}else{ 
$sql .= $a['id'].',' 
} 
$i++; 
} 

$sql .= ")"; 

あなたのデータベーススキーマを修正する必要があり

+0

配列項目を数えたり、追加などを繰り返したりする代わりに、implodeを試してください。 –

2

。これを試してみてください。クエリーは明らかで効率的です。

データベース内のすべての列には、アトミック値が含まれている必要があります。 1つの列に複数の値を格納している場合は、1対多の関係で表を作成する必要があることを意味します。

CREATE TABLE user_whatever (user_id int, whatever_id int) 

...ユーザーに関連する項目ごとに1つの行があります。これらの番号に対して別のテーブルを照会するには、クエリ内にこの新しいテーブルJOINを入力するだけです。

-1

いくつかの変数にあなたの最初のテーブルからIDS('1,2,3')でフィールドを取得します - >$ids

$sql = sprintf(SELECT * FROM second_table WHERE id IN (%s),$ids); 

・ホープ、このことができます。

ps:この方法でIDを格納することはおすすめしません。

あなたは何の問題もなくSQLでINを使用することができますが、あなたは破(セパレータ、配列)機能を使用して、たとえば互換性リストにPHPの配列を変換する必要があります
0

...

[更新]を見て質問の更新:「製品」を保存するために選択した方法はあまり良くなく、今後問題が発生します。これらの値を格納するための標準的な解決策は、追加のテーブル(userid、productid)を作成することで、プライマリキーは、それぞれのユーザ/製品権限ごとに複数の行を作成する両方のフィールドです。

作成した特定のソリューションを実際に使用するには、テーブルから値を取得するSQLを実行し、次に2番目のSQLを使用してWHERE IN $ idsを使用して実際にデータを取得する必要がありますこのような文字列の結果にINを使用することはできません(SQLのEVALはありません)

0

誰もが言いましたように、原子値を使用する必要がありますが、皆さんは既にこれを説明しているので、何を行う必要があります。

ID、ユーザ名とパスワードが含まれている、ユーザーのためにテーブルを使用しますが、製品のない

id - username - password 
1 - mike  - XXXX 
2 - joe  - XXXX 

次に、あなたがあなたの製品テーブル今

id - name     - price 
1 - Aluminum bat   - 19.99 
2 - Scattergun   - 39.99 
3 - BONK (with isotopes) - 14.99 

を持って、ユーザーが購入したものを表している第三のテーブルを、introdouce。今

user - product 
1 - 2 
1 - 3 
2 - 1 

あなたはmikeが買った製品を選択したい場合は、あなただけのユーザーIDが1に等しい第三のテーブルからすべての行を選択します。外部キーとインデックスと組み合わせて、クエリのパフォーマンスも向上するはずです。わかりやすくするために、これは私の例があなたの現在の実装のように見える方法です。

id - username - password - products 
1 - mike  - XXXX  - 2,3 
2 - joe  - XXXX  - 1