2017-11-10 1 views
0

から私は同じpreference_idに基づいて第1のグループメンバーにしたいこのグルーピングユーザはデータベース

+--------+----------+--------------+------------------+ 
| id  | user_id | preference_id|Sub_Preference_Id | 
+--------+----------+--------------+------------------+ 
| 15145 | 55  | 2   |  7   | 
| 15146 | 56  | 2   |  7   | 
| 15148 | 58  | 3   |  10   | 
| 15150 | 52  | 3   |  12   | 
| 15314 | 59  | 1   |  1   | 
| 15315 | 60  | 3   |  12   | 
| 15316 | 57  | 3   |  12   | 
+--------+----------+--------------+------------------+ 

ようなテーブルは、その特定同じpreference_idに再びiはグループ同じSub_Preference_Idしたい持っています。

+--------+----------+--------------+------------------+ 
| id  | user_id | preference_id|Sub_Preference_Id | 
+--------+----------+--------------+------------------+ 
| 15145 | 55  | 2   |  7   | 
| 15146 | 56  | 2   |  7   | 
+--------+----------+--------------+------------------+ 

+--------+----------+--------------+------------------+ 
| id  | user_id | preference_id|Sub_Preference_Id | 
+--------+----------+--------------+------------------+ 
| 15150 | 52  | 3   |  12   | 
| 15315 | 60  | 3   |  12   | 
| 15316 | 57  | 3   |  12   | 
+--------+----------+--------------+------------------+ 

+--------+----------+--------------+------------------+ 
| id  | user_id | preference_id|Sub_Preference_Id | 
+--------+----------+--------------+------------------+ 
| 15314 | 59  | 1   |  1   | 
+--------+----------+--------------+------------------+ 

+--------+----------+--------------+------------------+ 
| id  | user_id | preference_id|Sub_Preference_Id | 
+--------+----------+--------------+------------------+ 
| 15148 | 58  | 3   |  10   | 
+--------+----------+--------------+------------------+ 

私はこのように行われています:

$preference_idss = array('1','2','3','4','5','6'); 

foreach ($preference_idss as $preference_ids) { 

    $query ="SELECT * FROM gic_user_preference where preference_id='$preference_ids'"; 

    $result_preferencea = mysqli_query($createCon->connect(), $query); 

    while ($result_preference2 = mysqli_fetch_assoc($result_preferencea)) { 

     $groupedData[$result_preference2['sub_preference_id']][] = $result_preference2; 
    } 

} 

が、私は失敗した

手段が、私はこのようなグループがしたいですか?

どのように選択クエリを使用してデータを選択するか、php foreach、arrayなどを使用しないでください。

$in = join(',', array_fill(0, count($preference_ids), '?')); 
$select = <<<SQL 
    SELECT * 
    FROM gic_user_preference 
    WHERE preference_id IN ($in) 
    GROUP BY preference_id, Sub_Preference_Id; 
SQL; 
$statement = $pdo->prepare($select); 
$statement->execute($preference_ids); 

をあなたが等しくない 'を' を使用し、単一のフィールドに複数の値を検索したい場合はMySQLiを

$in = join(',', array_fill(0, count($preference_ids), '?')); 
$select = <<<SQL 
    SELECT * 
    FROM gic_user_preference 
    WHERE preference_id IN ($in) 
    GROUP BY preference_id, Sub_Preference_Id; 
SQL; 
$statement = $mysqli->prepare($select); 
$statement->bind_param(str_repeat('i', count($preference_ids)), ...$preference_ids); 
$statement->execute(); 
$result = $statement->get_result(); 

を使用した:PDOを使用して

+0

使用・グループ、Sub_Preference_Id? – madalinivascu

+0

1つのクエリで複数レベルの配列をMySqlに受け取ることはできません。結果を注文することしかできません。私はあなたのアプローチが正しいと思う。 – splash58

+0

私たちはそれを「グループ化」ではなく「順序付け」と呼びます。これはSQLで特別な意味を持ちます。 – Strawberry

答えて

1

。また、SQLインジェクションから保護する必要があります。

1

何も必要ありません。ただ、すべてのレコードをループし、好みIDとsubPreferenceID者に基づいて配列を作成します。

例えば:preference_idによって

$query ="SELECT * FROM gic_user_preference order by preference_id, sub_preference_id"; 

$result_preferencea = mysqli_query($createCon->connect(), $query); 
$groupedData = []; 

while ($result_preference2 = mysqli_fetch_assoc($result_preferencea)) { 
    $prefId = $result_preference2["preference_id"]; 
    $subPrefId = $result_preference2["sub_preference_id"]; 
    if(!isset($groupedData[$prefId])) $groupedData[$prefId] = []; 
    $groupedData[$prefId][$subPrefId] = $result_preference2; 
} 
+0

... –

+0

エラーは何ですか? –

+0

私はデータをのvar_dumpとき、それは、このようなエラーを示すです:お知らせ:未定義のインデックス:CでSub_Preference_Id:\ xamppの\ htdocsに\ gic001 \管理者\ライン上