получить дубликаты данных, используя форму базы данных whereIn sql - PullRequest
0 голосов
/ 14 ноября 2018

у меня есть массив ids [1,1,2,1,1,1], когда я использую, где In не повторять данные, я получаю данные только [1,2], как заставить его получить [1,1,2,1,1,1] в том же порядке?

 $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();

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

По вашему запросу 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()
0 голосов
/ 14 ноября 2018

В 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)

Если в таблице есть только одна строка с идентификатором = 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...