当我使用where时,我有ids [1,1,2,1,1,1]
的数组。在不重复数据的情况下,我仅获得[1,2]
的数据,如何使其以相同的顺序获得[1,1,2,1,1,1]
? / p>
$selected_tasknotes_persons_made_comment = tasksNote::where("noted_task", request()->task_id )->get()->pluck('user_id');
// $ selected_tasknotes_persons_made_comment = [1,1,2,1,1,1]
$persons_gave_notes = User::whereIn('id', $selected_tasknotes_persons_made_comment )->get();
答案 0 :(得分:2)
在SQL中,您的查询可能如下所示:
select id
from sometable
where id IN(1,1,2,1,1,1)
IN(1,1,2,1,1,1)
在SQL中的含义是:
select id
from sometable
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行),然后将其连接到源数据,然后将获得更多行。例如
select tablex.id
from tablex
inner join (
select 1 as n, 0 as sortby union all
select 1 as n, 1 as sortby union all
select 2 as n, 2 as sortby union all
select 1 as n, 3 as sortby union all
select 1 as n, 4 as sortby union all
select 1 as n, 5 as sortby
) myarray on tablex.id = myarray.n
order by
myarray.sortby
答案 1 :(得分:1)
根据您的查询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';
因此,您可以像这样执行原始查询
$results = DB::select($sql_query);
另一种方式(使用雄辩的方法):我对下面的查询有点困惑,但是您可以使用havingRaw
User::whereIn('id', $selected_tasknotes_persons_made_comment )
->havingRaw('count(*) > 1'); })->get()