2016-08-26 6 views
0

testuser_testという名前の私のデータベースにユーザーグループとユーザーテーブルを作成しました。すべてのユーザは、少なくとも1つの数字をカウントするgroupsというフィールドを持っていますが、複数の数字を含むこともできます(たとえば、1,2,3)。ユーザーグループテーブルは、idgroup_nameの存在します。PHP - 数値/コンマで複数の行を検索中

これまで私がやってきたことは、このユーザーが割り当てられているすべてのグループからデータを取得することです。たとえば、1人のユーザがグループ1,2,3(データベースに表示されている)に割り当てられている場合、それらのIDを持つ各グループの名前が表示されます。だからおそらく、それはgroup 1group 2group 3を印刷するだろう。

$user_test = $this->mysqli->query("SELECT user_id,groups FROM user_test WHERE user_id = '1'"); 
while($user_test_fetch = $user_test->fetch_array()) { 
    $groups = $user_test_fetch["groups"]; 
} 

if(strlen($groups) > 1) { // user has more than 1 group 
    // ??? 
} else { // user does not have more than 1 group 
    $search = "id = '".$groups . "'"; 
} 

$group_data = $this->mysqli->query("SELECT * FROM test WHERE ".$search.""); 
while($group_data_fetch = $group_data->fetch_array()) { 
    echo $group_data_fetch["group_name"]; 
} 

このタスクを実行する方法が他にもある場合は、お気軽にお見せください!私はこの作業を(できるだけ効率的に)行う方法を学ぶだけです。

+0

データベーススキーマを変更できますか? 1つの列に複数の値を格納すると、ほとんど常に頭痛が発生します。 – Chris

+0

@Chrisいいえ、申し訳ありません。私はこのようにこれを行う方法を知りたい。 –

+1

スキーマを正規化します。自分自身を痛みの世界で救う。 – Strawberry

答えて

1

かなり簡単です。
1,2,3形式で保存されている場合。そして1とidと呼ばれる単一のものと仮定してINTまたはBIGINTある

if(strlen($groups) > 1) { // user has more than 1 group 
// ??? 
} else { // user does not have more than 1 group 
$search = "id = '".$groups . "'"; 
} 

$search = "id IN (".$groups."); 

このシングルにする

変更(それがVARCHARであればそうでない場合は、このクエリが遅くなります)行はコンマで区切られている限り、単一のグループまたはグループのセットで動作します(SQLはコンマを好むので)

+0

あなたは毎日何か新しいことを学びます!答えをありがとう。私はSQL内の私の知識だけで十分ではなかったと思う!私はこれを数分で正解とマークします:) –

関連する問題