MySQL запрос, чтобы получить список, включая дубликаты из массива - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь запустить список из 12 чисел в запрос MySQL. Список содержит дубликаты, которые игнорируются в результатах запроса, изменяя общую длину списка. Я все еще изучаю потенциал mysql, поэтому извиняюсь, если мне не хватает чего-то простого. этот код применяется к боту, который позволяет играть в карточную игру с помощью раздоров.

Я пробовал несколько разных результатов, которые люди ставили здесь, и ничего не получалось так, как я хотел. От объединения всех до объединений, похоже, ничто не поможет. Конечно, я не видел, чтобы кто-то был в таком же положении, как я.

masterlist - это таблица в той же базе данных, которая представляет собой список из 52 строк.

массив - это массив из 12 чисел, который можно найти в поле идентификатора главного списка. Этот массив происходит из таблицы, составленной двумя игроками на более раннем этапе карточной игры.

тип - это значение, которое найдено в соответствии с идентификатором. Каждый тип используется несколькими идентификаторами.

con.query(`SELECT a.id, a.type FROM masterlist a,
        (SELECT id, type 
        FROM masterlist
        WHERE id in (${array.join(", ")})
        GROUP by id, type
        HAVING COUNT(*) > 1 ) b
        WHERE  a.id = b.id
        AND a.type = b.type` 

Возвращает пустой массив.

Проблема в том, что любые повторяющиеся числа в массиве игнорируются. Результаты этого запроса будут иметь идентификатор, совпадающий с ним в отдельном списке (тип [0] будет соответствовать идентификатору [0]. Один из результатов будет выбран случайным образом на основе типа. Если дубликат игнорируется, что уменьшает шансы на то, что id выбирается случайным образом. Надеюсь, это имеет смысл. Это для бота-раздора, который позволяет игрокам играть в карточную игру друг с другом, поэтому важно сохранять как можно более справедливые шансы.

Я хочу получить результат перечисления всех 12 значений (типов), дубликатов, включенных в один массив после выполнения запроса или запросов (без группировки дубликатов значений). Эффективность на самом деле не важна, так как мастер-лист не будет содержать тысячи записей. На данный момент я просто хочу что-то функциональное, даже если для этого требуется пара разных запросов.

EDIT: Вот что печатает на консоли. https://i.gyazo.com/b843d8831d7801f14f34edc94a2a1831.png Первая строка - это массив чисел, взятый из таблицы, в которой числа были изначально сохранены после ввода двумя игроками в игре. Вторая строка - это те же числа, отсортированные по возрастанию. Результатом вышеприведенного запроса является третья строка, просто пустой массив.

Ожидаемый результат должен быть примерно таким, за исключением того, что он должен иметь 12 значений, а не 11. https://i.gyazo.com/fffd26c1628fbb2374070f7154c28b7b.png Исходный набор значений в «массиве» имел 12 чисел, при этом значение 7 содержало дубликат. Этот массив значений был напечатан из этого https://i.gyazo.com/151ebf67c0f2871661bd819e3c8865f9.png, передающего массив в запрос без каких-либо подзапросов, объединений или объединений. Я понимаю, что этот запрос, как написано, только перечисляет уникальные значения в результатах, если идентификатор был другим. Я хочу, чтобы список чисел, передаваемых в запрос или запросы, извлекал все 12 типов, которые с ним связаны, и отображался в том же порядке, что и вход отсортированного массива выше.

Например, исходный массив был таким:

[ '1', '4', '5', '7', '7', '8', '12', '17', '24', '38', '45', '48' ]

Я ожидаю, что результат будет:

[ 'greenfist',
  'greenfist',
  'greenfist',
  'greenfist',
  **'greenfist',**
  'greenfist',
  'greenfist',
  'flamefist',
  'shield',
  'magicshield',
  'helix',
  'helix' ]

Значение с ** является дубликатом массива 7 из массива, который игнорируется в запросе, в котором не используются объединения, объединения или подзапросы. Входные данные МОГУТ содержать дубликаты, тройки, четырехкратные дубликаты и т. Д., Поэтому потребуется перечислить все копии.

EDIT2: это таблица для "masterlist". https://i.gyazo.com/41571f2da48d11373f884d23b4e3e92d.png Примечание: пока я изменил Coreid на «id» в посте, просто для упрощения. Когда я запускаю код, я помещаю правильные переменные. Названия идентификаторов в списке - «ядра» в карточной игре, так что я чувствовал, что это излишне. Мне не нужна информация effect1, faction1, effect2 или faction2 из этого запроса. Мне просто нужно coreid и тип.

Спасибо!

...