Получить повторяющиеся данные, используя базу данных whereIn form sql

У меня есть массив ids [1,1,2,1,1,1], когда я использую where 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();
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
342
2

Ответы 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

Согласно вашему запросу 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()

Другие вопросы по теме