使用where form sql数据库获取重复数据

cuxqih21  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(360)

我有一系列的 ids [1,1,2,1,1,1] 当我使用where-in时,不要重复我得到的数据 [1,2] 只是,如何让它变得 [1,1,2,1,1,1] 同样的顺序?

  1. $selected_tasknotes_persons_made_comment = tasksNote::where("noted_task", request()->task_id )->get()->pluck('user_id');

//$selected\u tasknotes\u persons\u made\u comment=[1,1,2,1,1,1]

  1. $persons_gave_notes = User::whereIn('id', $selected_tasknotes_persons_made_comment )->get();
8ljdwjyq

8ljdwjyq1#

根据你的询问 User::whereIn('id', $selected_tasknotes_persons_made_comment )->get() 这意味着它将返回唯一性结果,如果要获取重复记录,请按照以下说明操作:
您可以在laravel中执行原始查询,以使用 UNION ALL ```
$sql_query= 'SELECT u.*
FROM User u
JOIN ( SELECT 1 AS id UNION ALL SELECT 1 AS id
UNION ALL SELECT 2 AS id
UNION ALL SELECT 1 AS id
UNION ALL SELECT 1 AS id
UNION ALL SELECT 1 AS id
) i ON i.id= u.id';

  1. 所以,可以像这样执行原始查询

$results = DB::select($sql_query);

  1. 另一种方法(使用雄辩的方法):我对下面的查询有点困惑,但您可以使用 `havingRaw` ```
  2. User::whereIn('id', $selected_tasknotes_persons_made_comment )
  3. ->havingRaw('count(*) > 1'); })->get()
展开查看全部
jgzswidk

jgzswidk2#

在sql中,查询可能如下所示:

  1. select id
  2. from sometable
  3. where id IN(1,1,2,1,1,1)

怎么回事 IN(1,1,2,1,1,1) 在sql中的意思是:

  1. select id
  2. from sometable
  3. where (id = 1 or id = 1 or id = 2 or id = 1 or id = 1 or id = 1)

如果表中只有一个id=1的行,则只返回该行。它不会乘以为该行筛选的次数。
另请注意,通常(按惯例)列 id 在表中是唯一的,因此可能只有一行id=1和一行id=2。
此外,在sql表中是“无序集”,在应用 order by 条款。
简言之,您所期望的是sql根本无法做到的事情。
您可以将数组值插入到一个表(或“派生表”)中,该表中每行有一个值(即示例中的6行),然后将该值与源数据联接,然后您将获得更多的行。例如

  1. select tablex.id
  2. from tablex
  3. inner join (
  4. select 1 as n, 0 as sortby union all
  5. select 1 as n, 1 as sortby union all
  6. select 2 as n, 2 as sortby union all
  7. select 1 as n, 3 as sortby union all
  8. select 1 as n, 4 as sortby union all
  9. select 1 as n, 5 as sortby
  10. ) myarray on tablex.id = myarray.n
  11. order by
  12. myarray.sortby
展开查看全部

相关问题