Добрый день! Столкнулся с задачей интересной, не могу решить. Есть таблица примерно 1000 строк, все столбцы описывать не буду, интересует только 1. Порядок вывода. По нему сортируется таблица и выводятся значения. Соответственно первая выборка э то от 1 до 10. Задача в том, что если есть 2 повторяющихся значения надо их сгруппировать и вывести случайную. Код (Text): а - 1 к - 1 б - 2 с - 3 д - 4 п - 11 йц - 11 пц - 11 пц - 11 Итого надо получить что-то типа того Код (Text): а - 1 б - 2 с - 3 д - 4 п - 11 йц - 11 пц - 11 пц - 11 Еще запрос, то так Код (Text): к - 1 б - 2 с - 3 д - 4 п - 11 йц - 11 пц - 11 пц - 11 Буду благодарен хотя бы за наводку куда смотреть. Думал Union использовать, ну это не правильно, хотелось бы все в 1 запросе..
GROUP BY группирует все значения, а мне надо что-то типа условия группировки having тоже не то - это фильтр
Над этим можно и поколдовать PHP: SELECT * FROM users WHERE login IN (SELECT login FROM users GROUP BY login HAVING COUNT(login)>1)
Бабка гадала гадала да не угадала @AnonimS, ты спорить пришёл или запрос писать? Напиши запрос с группировкой Не ну если не хочешь напрягаться, могу готовый запрос рублей за 300 продать
Спасибо за идею, помогло. Основной запрос не трогал, сделал во FROM подзапрос, чтобы выборка уже была из "готовых строк". Однако криво как-то получается я для каждой из 10 строк делаю запрос и вытаскиваю случайную строку. по сути 10 запросов со схожей логикой, задача которой вытащить 1 случайную строчку, если их более 1..
Спасибо, решений тут на самом деле не 1, мне показалось самое оптимальном вот это: Код (Text): .... from ( SELECT * FROM ТаблицаДанных WHERE ПолеСортировки BETWEEN 1 AND 10 ORDER BY RAND() ) as t GROUP BY t.ПолеСортировки ORDER BY t.ПолеСортировкиASC) ... Таким образом не нужно использовать куча запросов и UNION, был еще вариант GROUP_CONCAT()..
Вот так можно объединить два совпадения: Код (Text): create table t1(x int, y int); insert into t1 values(1,1); insert into t1 values(2,1); insert into t1 values(3,2); insert into t1 values(4,3); insert into t1 values(5,3); insert into t1 values(6,3); select t1.y from t1 join (select x, count(*) as y from t1 group by y having count(*)=2) as t2 on t1.x!=t2.x;
А мне кажется, что текстовое описание цели не соответствует приведенному примеру "...что-то типа того". Что-то сгруппировал, а что-то оставил как есть. Еще есть обоснованное сомнение на счёт того как ТС использовал группировку здесь. Он исходит из того, что порядок строк до группировки повлияет на выдачу после group by. На самом деле в выдаче могут присутствовать только группируемые поля и агрегаты от других полей. Следствие: никаких случайных записей не будет. Повторный запрос выведет ровно тот же результат. --- Добавлено --- P.S. Поясню: вот такой запрос ошибочен Код (Text): SELECT * FROM sometable ORDER BY somefield при некоторых настройках MySQL не репортит ошибку, но вообще это против стандарта ANSI SQL. потому что непонятно какие именно значения должны браться для всех полей кроме somefield. а начиная с версии MySQL 5.7 по умолчанию применяются строгие правила при группировке см. доку https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sqlmode_only_full_group_by Итого, ты хочешь сделать такое Код (Text): SELECT groupable, sortable FROM (SELECT...ORDER BY RAND()) x GROUP BY groupable надеясь получать случайное значение в sortable. Но увы, это приведёт к ошибке. А если применишь агрегат к sortable, уйдёшь от ошибки, но лишишся случайности. Например MAX(sortable), SUM(sortable) или GROUP_CONCAT(sortable) дают предсказуемый неслучайный результат.
Задача как я понял, если два повторения во втором столбце: а - 1 к - 1 вывести а - 1 или к - 1 случайно, а строки с 11 не трогать тк повторяется больше двух раз, но там есть еще условие, делать это в каждых 10 строках из 1000 строк.
Если 2 повтора, то выбрать одно, а если без повторов или более 2х повторов, то оставить как есть? Это как-то люто вообще. © не верю! --- Добавлено --- Согласен, что заглавное сообщение выглядит именно так, но.... --- Добавлено --- Если так, то я пошёл отсюда восвояси
@AnonimS глянь, может быть пригодится: https://php.ru/forum/threads/resheno-zadachka-pro-vybor-sluchajnogo-iz-gruppy.75450/