Reputation: 75
I have table with different users and their preference, like this
+--------+----------+--------------+
| id | user_id | preference_id|
+--------+----------+--------------+
| 15145 | 12 | 1 |
| 15146 | 13 | 1 |
| 15148 | 15 | 2 |
| 15150 | 25 | 2 |
| 15314 | 26 | 3 |
| 15315 | 29 | 1 |
| 15316 | 30 | 3 |
| 15317 | 32 | 3 |
| 15318 | 33 | 1 |
| 15319 | 34 | 2 |
+--------+----------+--------------+
I need group this users based on preference id. like this:
+--------+----------+--------------+
| id | user_id | preference_id|
+--------+----------+--------------+
| 15145 | 12 | 1 |
| 15146 | 13 | 1 |
| 15315 | 29 | 1 |
| 15318 | 33 | 1 |
+--------+----------+--------------+
+--------+----------+--------------+
| id | user_id | preference_id|
+--------+----------+--------------+
| 15314 | 26 | 3 |
| 15316 | 30 | 3 |
| 15317 | 32 | 3 |
+--------+----------+--------------+
+--------+----------+--------------+
| id | user_id | preference_id|
+--------+----------+--------------+
| 15148 | 15 | 2 |
| 15150 | 25 | 2 |
| 15319 | 34 | 2 |
+--------+----------+--------------+
I checked this mysqli query but this showing not give my needs.
$sql="SELECT * FROM gic_user_preference GROUP BY preference_id";
$result=mysqli_query($createCon->connect(), $sql);
while ($arr = mysqli_fetch_assoc($result)) {
var_dump($arr);
}
Upvotes: 0
Views: 56
Reputation: 31812
You can save the data in groups in PHP while fetching it from DB using an associative array indexed by your group field:
$groupedData = [];
while ($arr = mysqli_fetch_assoc($result)) {
$groupedData[$arr['preference_id']][] = $arr;
}
$groupedData
will then look like
[
1 => [
['id' => 15145,'user_id' => 12, 'preference_id' => 1],
['id' => 15146,'user_id' => 13, 'preference_id' => 1],
//...
],
2 => [
['id' => 15148, 'user_id' => 15, 'preference_id' => 2],
['id' => 15150, 'user_id' => 25, 'preference_id' => 2],
//...
],
3 => [
// ...
],
// ...
]
Upvotes: 0
Reputation: 133370
seems you need order by
SELECT * FROM gic_user_preference ORDER BY preference_id
and check for preference_id change in your loop ... otherwise you must perform a select for each distinct preference_id and show the result
Upvotes: 1