Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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 从数据库中获取唯一记录并具有所有逗号分隔的ID_Mysql_Sql_Database_Laravel - Fatal编程技术网

Mysql 从数据库中获取唯一记录并具有所有逗号分隔的ID

Mysql 从数据库中获取唯一记录并具有所有逗号分隔的ID,mysql,sql,database,laravel,Mysql,Sql,Database,Laravel,我有一个表,想找到重复的名称和逗号分隔的ID记录 table users Id name 1 xyz 2 abc 3 def 4 xyz 5 sss 6 def 我希望用户的ID使用逗号分隔的ID作为唯一记录,在我的示例中,我希望用户'xyz'的ID为1,4,用户'def'的ID为3,6 我尝试了唯一查询,但它只返回最后一个或第一个id 正在寻找mysql查询或laravel eloquent中的帮助。//获取名为'xyz'的

我有一个表,想找到重复的名称和逗号分隔的ID记录

table users
Id     name
1      xyz
2      abc
3      def
4      xyz
5      sss
6      def
我希望用户的ID使用逗号分隔的ID作为唯一记录,在我的示例中,我希望用户'xyz'的ID为1,4,用户'def'的ID为3,6

我尝试了唯一查询,但它只返回最后一个或第一个id

正在寻找mysql查询或laravel eloquent中的帮助。

//获取名为'xyz'的用户ID并将其连接在一起
User::where('name','xyz')->pull('id')->join(','))
如果要为所有用户执行此操作:

$data=[];
User::pull('name')->每个(函数($User){
$data[]=[
'name'=>$user;
'匹配'=>User::where('name',$User)->pull('id')->join(','))
];
});
然后将有一个如下所示的数组:

[['name' => 'xyz', 'matches' => '1,4'], [['name' => 'abc', 'matches' => '2'], [...]]
//获取名为'xyz'的用户ID,并将它们连接在一起
User::where('name','xyz')->pull('id')->join(','))
如果要为所有用户执行此操作:

$data=[];
User::pull('name')->每个(函数($User){
$data[]=[
'name'=>$user;
'匹配'=>User::where('name',$User)->pull('id')->join(','))
];
});
然后将有一个如下所示的数组:

[['name' => 'xyz', 'matches' => '1,4'], [['name' => 'abc', 'matches' => '2'], [...]]
试着这样做:

$values = [];
$user = User::where('name', 'xyz');
$users = DB::table('users')->select('*')->where('name',$user->name)->get();
foreach ($users as $user) {
     foreach(explode(',', $users ->id) as $value) {
     $values[] = trim($value);
  }
}
$values = array_unique($values);
试着这样做:

$values = [];
$user = User::where('name', 'xyz');
$users = DB::table('users')->select('*')->where('name',$user->name)->get();
foreach ($users as $user) {
     foreach(explode(',', $users ->id) as $value) {
     $values[] = trim($value);
  }
}
$values = array_unique($values);

可以在SQL中使用以下命令执行此操作:

select name, group_concat(id) as id
from t
group by name
如果您只需要具有多个id的名称,请添加:

having count(*) > 1

可以在SQL中使用以下命令执行此操作:

select name, group_concat(id) as id
from t
group by name
如果您只需要具有多个id的名称,请添加:

having count(*) > 1


SELECT name,GROUP\u CONCAT(id)FROM users GROUP BY name
@Akina您可能希望在
GROUP\u CONCAT
@TimBiegeleisen OP中有一个
ORDER BY id
子句,它不告诉您要排序的id列表。@Akina您的查询可以正常工作!考虑在应用程序代码中处理数据显示的问题。<代码>从名称组< /代码> @用户组中选择No.GROPPEKCONAT(ID)。Akina,您可能希望在代码< > GypB-CONTAT < /代码>中按ID < >代码>子句。@ TimiGeELEISEN OP对ID列表不进行排序。@ Akina,您的查询工作!考虑应用程序代码中的数据显示问题。我不需要对Table的所有名称进行查询。添加了一个循环的例子,我使用了SELECT(DB::RAW(GROPPE-CONTAT(ID)为IDS)),然后GROMPBY(“名称”)用户::选择(DB::RAW(GROPPE-CONTAT(ID)为IDS),‘名称’)-> GROPBY(“名称”)-> GET()-> toRayay.();我不需要单一名称,应该是查询表中的所有名称我添加了一个循环的示例我使用了select(DB::raw('group_concat(id)作为id'),然后使用groupBy('name')User::select(DB::raw('group_concat(id)作为id'),'name')->groupBy('name')->get()->TOARRARRAY();这是一种非常低效的方法,因为您从数据库获取整个用户表,然后在phpyeah中处理它,您是对的!这是一种非常低效的方法,因为您从数据库获取整个用户表,然后在phpyeah中处理它,您是对的!