Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何对查询中的结果进行分组?_Mysql_Arrays_Sorting_Group By - Fatal编程技术网

Mysql 如何对查询中的结果进行分组?

Mysql 如何对查询中的结果进行分组?,mysql,arrays,sorting,group-by,Mysql,Arrays,Sorting,Group By,我有一个MySQL查询,可以选择用户名和他们的知识(可能不止一个) 它返回类似这样的内容 array(5) { [0]=> array(5) { ["user_id"]=> string(2) "30" ["name"]=> string(6) "foo1" ["knowledge"]=> string(15) "Basic Materials" } [1]=> array(5) { ["u

我有一个MySQL查询,可以选择用户名和他们的知识(可能不止一个)

它返回类似这样的内容

array(5) {
  [0]=>
  array(5) {
    ["user_id"]=>
    string(2) "30"
    ["name"]=>
    string(6) "foo1"
    ["knowledge"]=>
    string(15) "Basic Materials"
  }
  [1]=>
  array(5) {
    ["user_id"]=>
    string(2) "33"
    ["name"]=>
    string(6) "foo2"
    ["knowledge"]=>
    string(15) "Basic Materials"
  }
  [2]=>
  array(5) {
    ["user_id"]=>
    string(2) "34"
    ["name"]=>
    string(10) "foo3"
    ["knowledge"]=>
    string(9) "Eating"
  }
  [3]=>
  array(5) {
    ["user_id"]=>
    string(2) "34"
    ["name"]=>
    string(10) "foo3"
    ["knowledge"]=>
    string(9) "Financial"
  }
  [4]=>
  array(5) {
    ["user_id"]=>
    string(2) "34"
    ["name"]=>
    string(10) "foo3"
    ["knowledge"]=>
    string(8) "Services"
  }
}
如您所见,在本例中,它确实返回五个条目。但是,其中三个具有重复的ID(和名称)。我正在寻找一种只返回三个这样的条目的方法

array(5) {
  [0]=>
  array(5) {
    ["user_id"]=>
    string(2) "30"
    ["name"]=>
    string(6) "foo1"
    ["knowledge"]=>
    string(15) "Basic Materials"
  }
  [1]=>
  array(5) {
    ["user_id"]=>
    string(2) "33"
    ["name"]=>
    string(6) "foo2"
    ["knowledge"]=>
    string(15) "Basic Materials"
  }
  [2]=>
  array(5) {
    ["user_id"]=>
    string(2) "34"
    ["name"]=>
    string(10) "foo3"
    ["knowledge"]=>
    string(9) "Eating"
  }
  [3]=>
  array(5) {
    ["user_id"]=>
    string(2) "34"
    ["name"]=>
    string(10) "foo3"
    ["knowledge"]=>
    string(9) "Financial"
  }
  [4]=>
  array(5) {
    ["user_id"]=>
    string(2) "34"
    ["name"]=>
    string(10) "foo3"
    ["knowledge"]=>
    string(8) "Services"
  }
}
在查询中可以这样做吗

array(5) {
  [0]=>
  array(5) {
    ["user_id"]=>
    string(2) "30"
    ["name"]=>
    string(6) "foo1"
    ["knowledges"]=>
    array(1) {
        [0] => string(15) "Basic Materials"
    }
  }
  [1]=>
  array(5) {
    ["user_id"]=>
    string(2) "33"
    ["name"]=>
    string(6) "foo2"
    ["knowledges"]=>
    array(1) {
        [0] => string(15) "Basic Materials"
    }
  }
  [2]=>
  array(5) {
    ["user_id"]=>
    string(2) "34"
    ["name"]=>
    string(10) "foo3"
    ["knowledges"]=>
    array(1) {
        [0] => string(15) "Eating"
        [1] => string(15) "Financial"
        [2] => string(15) "Services"
    }
  }
}
我看到的另一个选择是在服务器端处理结果

以下是查询的外观:

SELECT `profiles`.`user_id`, `users`.`name`, `users`.`surname`, `users`.`country`, `profile_knowledges`.`knowledge`
FROM `profiles`
JOIN `users`
ON (`users`.`id` = `profiles`.`user_id`)
JOIN `profile_knowledges`
ON (`profile_knowledges`.`profile_id` = `profiles`.`id`)

对于这种特殊情况,您可以这样写:

$users = array();

while ($row = /* fetch a single row from result set */) {
    if (isset($users[$row['user_id']]) == false) {
        $users[$row['user_id']] = array(
            'id' => $row['user_id'],
            'name' => $row['name'],
            'knowledges' => array()
        );
    }

    $users[$row['user_id']]['knowledges'][] = $row['knowledge'];
}

不过,最好使用例如来处理这种情况。

谢谢,我就是这么想的。是我想到的。。。如何使用ORM实现这一点?:)