Задавайте вопросы, мы ответим
Вы не зашли.
select substring_index(rubric,'#',3) as rubric, min(id) as id, count(*) from table group by substring_index(rubric,'#',3)
Здравствуйте, подскажите пожалуйста.
Скажите, сделать сортировку id в данном примере. Чтобы выводил не наименьший id, а id у которого скажем самый большой рейтинг. Т.е отсортировать id внутри группировке по полю raiting?
Неактивен
Неактивен
Все прочитал, но так и не понял как решить задачу.
Неактивен
А нельзя как-то принудить брать все значения из одной и той же строки, а отсортировать их по max(reiting)?
Неактивен
select substring_index(rubric,'#',3) as rubric, min(id) as id, name, count(*) from table group by substring_index(rubric,'#',3)
И название должно совпадать. А так получается id одного товара, а название другого
Неактивен
platedz написал:
Все прочитал, но так и не понял как решить задачу.
в примерах из статьи замените:
user_id -- rubric
time -- raiting
post -- name, id и прочие нужные вам поля
Неактивен
Исходя из второго способа, я так понял сделать это лучше всего так
И данный пример выведет мне лучшие по рейтингу
select substring_index(rubric,'#',3) as rubric, max(concat_ws(','raiting,id)) as id, count(*) from table group by substring_index(rubric,'#',3)
Поправьте меня, если я где-то ошибся.
Если все правильно, то возникает вопрос, а как мне вывести только id, те. урезать до запятой с конца, с учетом, что если raiting будет равен нуль, то выведет безо всяких запятых только id
Неактивен
а разве у вас значения рейтинга фиксированной ширины, т.е. всегда число от 0 до 9 ?
учитывая, что вы берете max от рейтинга, а не от вычислений над ним, то вам этот способ не обязателен
Неактивен
Я планирую не только рейтинг. Сортировка по дате, рейтингу, по количеству просмотров, они все числовые и можно получить самое высокое значение. Все они разной длины но в любом случае делятся по сепаратору, теперь было бы неплохо урезать значение "дата рейтинг или количество просмотров, идентификатор название или еще что-то" до "идентификатор название или еще что-то", можно конечно это сделать уже с результатом, но хотелось бы узнать можно ли как-то в mysql
Неактивен
что-то я теряю нить ваших рассуждений.
чем не подходит, например, третий способ?
Неактивен
С точки зрения производительности это плохой метод, так как требуется полный скан таблицы и для каждой строки выполняется подзапрос.
Неактивен
используйте первый
Неактивен
так там же тоже подзапрос. Второй мне показался самым производительным. Или я ошибаюсь?
Неактивен
в одном случае подзапрос в другом лишние вычисления
преждевременная оптимизация - зло
Неактивен
Так сделал.
select substring_index(rubric,'#',3) as rubric, substring_index(max(concat_ws(',',reiting,id)),',',-1) as id, count(*) from table group by substring_index(rubric,'#',3)
Отредактированно platedz (17.01.2016 17:35:18)
Неактивен