У меня есть таблица MySQL, который выглядит следующийMySQL запросов установить LIMIT уникальных значений поля
---------------------------------------
|id |setId |value1 |value2 |
---------------------------------------
|1 |1 |value1 |value2 |
|2 |2 |value1 |value2 |
|3 |2 |value1 |value2 |
|4 |3 |value1 |value2 |
---------------------------------------
в основном Есть много записей (выше только в качестве примера) с уникальным IDs
, но у многих есть такой же "setID"
.
Теперь, скажем, у меня есть следующий код:
SELECT * FROM table WHERE <rule> LIMIT 0,50
<rule>
не всегда то же самое, так что может Aswell игнорировать его здесь. Это вернет первые 50 записей.
В этом случае мне нужно вернуть первые строки n
с до 50 уникальными идентификаторами setID.
Это означает, что если я посмотрю на приведенную выше таблицу с этим обычным «LIMIT», установленным на «2», он вернет первые 3 строки. Если LIMIT будет «3», он должен будет вернуть все 4 строки (поскольку id
2 и 3 используют один и тот же setID).
Если я использую GROUP BY setId
, пользовательский LIMIT будет работать, но он не возвратит строку с id
из 3 вообще, например.
Какая будет наилучшая возможная строка SQL для этого? Помощь очень ценится.
редактировать таблица не уже заказан setId
, поэтому нет необходимости использовать какие-либо ORDER BY
здесь.
edit2 как сказано в комментариях вероятно, лучший способ сделать это будет:
«Одна полная копия результатов присоединяется к второй копии результатов, который использует GROUP BY и JOIN, чтобы найти первые 50 setIDs. "
К сожалению, я не знаком с синтаксисом SQL, кто-нибудь знает хороший способ сделать это? Большое спасибо.
не успевает написать и проверить все, но в основном вы получаете желаемые результаты (без LIMIT), а затем ПРИСОЕДИНИТЕСЬ с тем же набором результатов, сгруппированных по setID, ограничивая это значением до 50. Обратите внимание, что выбор ORDER BY является потенциально важным. – RobP
Таблица уже заказана setId, так что все в порядке. Если I GROUP BY setId, некоторые строки не будут возвращены (например, value1 и value2 строки с id 3 не будут возвращены. – shiro
Вы поняли, что я говорю о JOIN? Одна полная копия результатов объединена с второй экземпляр результатов, который использует GROUP BY и JOIN для поиска первых 50 идентификаторов set. – RobP