Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Заблокирован

Сгруппировать выдачу при условии

23.04.2020, 03:47. Показов 1159. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
PHP
1
GROUP BY category
Группирует, по одной новости из каждой категории. Другой вопрос как группировать только в том случаи если задана категория, то есть когда category !=0
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.04.2020, 03:47
Ответы с готовыми решениями:

Как найти для этих условии 2 парных чисел а и b при котором выполняется все условии?
Мой пример кода был таким данный момент но не работал. В экране пустота. Ничего не выводится. Где у меня ошибка? Чего исправит? static...

Как при закрытии книги отменить выдачу сообщения обновления данных?
Как программно при закрытии книги со связанными данными отменить выдачу сообщения о обновлении данных?

Как предотвратить выдачу второго и последующих сообщений при поиске подстроки в строке?
Есть код, который ищет в HTML слово, и если оно есть выдаёт сообщение... Проблема в том, что код встречается 2 раза и соответственно 2...

3
Невнимательный
 Аватар для ft4l
3107 / 1279 / 358
Регистрация: 08.02.2013
Сообщений: 7,477
Записей в блоге: 2
23.04.2020, 05:00
Лучший ответ Сообщение было отмечено Gerd199 как решение

Решение

MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE `t` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `category` tinyint(4) NOT NULL DEFAULT '0',
  `txt` varchar(32) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `category` (`category`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
 
INSERT INTO t (category, txt) VALUES
  (1, 'first 1'), (2, 'first 2'), (3, 'first 3'), (0, 'first 0'), (1, 'second 1'), 
  (3, 'second 3'), (1, 'third 1'), (0, 'second 0'), (3, 'third 3'), (2, 'second 2'), (0, 'third 0');
  
  SELECT * FROM t GROUP BY IF(category=0, id, category);
id category txt
1 1 first 1
2 2 first 2
3 3 first 3
4 0 first 0
8 0 second 0
11 0 third 0
Записи с нулём могут оказаться вперемешку с остальными и нужно будет ещё ORDER BY

Не по теме:

EXPLAIN SELECT * FROM t GROUP BY category; показывает possible_key=>category



Добавлено через 5 минут
Хотя нет , могуть быть id(!=0) == category(with id=0)
MySQL
1
SELECT * FROM t GROUP BY IF(category=0, CONCAT_WS('_', id, category), category);
Добавлено через 2 минуты
или вот ))
MySQL
1
SELECT * FROM t GROUP BY IF(category=0, -id, category);
0
Заблокирован
23.04.2020, 06:02  [ТС]
Здорово, есть одно но.

Сортировка по убыванию, по дате добавления. Работает должным образом, сперва идут свежие новости. НО с групировкой.

Скажем 3 новости без группировки.

HTML5
1
2
3
4
5
6
7
id  category name   time
6     0      titl6    60
5     1      titl5    50
4     1      titl4    40
3     1      titl3    30
2     2      titl2    20
1     2      titl1    10
SQL
1
ORDER BY TIME DESC
Сортирует так как изначально добавляем
GROUP BY IF(category=0, -id, category);

Получаем
HTML5
1
2
3
4
id  category name   time
6     0      titl6    60
4     1      titl4    40
1     2      titl1    10
То есть если категория таже, то возьмет запись которая была опубликована раньше, а не та что последня при сортировке
SQL
1
ORDER BY TIME DESC
Возможно это поправить?
0
Невнимательный
 Аватар для ft4l
3107 / 1279 / 358
Регистрация: 08.02.2013
Сообщений: 7,477
Записей в блоге: 2
23.04.2020, 08:05
... Трудно сказать. Если сделать так
MySQL
1
2
3
4
5
6
ALTER TABLE t ADD COLUMN tdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP; 
UPDATE t SET tdate = tdate + INTERVAL id HOUR;
 
SELECT t.* 
FROM t RIGHT JOIN (SELECT id, MAX(tdate) max FROM t GROUP BY IF(category=0, -id, category)) AS x 
ON x.max=t.tdate ;
то как-то это не то , как если MAX(id) max и ON x.max=t.id
а c x.id =t.id тоже первые id ... возможно может быть что-то лучше

Добавлено через 53 минуты
Наверно удобнее что-то типа такого
MySQL
1
2
3
4
5
6
7
8
( SELECT t.* 
  FROM t RIGHT JOIN (SELECT MAX(tdate) max FROM t WHERE category !=0 GROUP BY category)  x 
  ON x.max=t.tdate 
 ) UNION ALL (
SELECT t.* 
  FROM t WHERE category=0
  ORDER BY tdate DESC
  LIMIT 3);
Проще поставить лимиты для одного или другого и GROUP BY без наворотов
только это MAX(tdate) опять-же возможно может повторяться
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.04.2020, 08:05
Помогаю со студенческими работами здесь

Написать функцию возвращающую значение 10 при одном условии и 20 при другом
написать функцию, возвращающую значение 10, если в одномерном массиве кол-во отрицательных элементов больше или равно кол-ву нулей и 20 - в...

Скрытие полей при печати при условии, что они пусты
добрый вечер! помогите с формулами, пожалуйста. есть таблица с полями. тип полей: текст, изменяемое. хочется добавить сразу...

Ошибка при обновлении данных в БД из DataGridView при определенном условии
Собственно проблема в следующем... в приложение добавил обновление БД из dgv. Сделано по примеру, как в видео _sB0A6FIhUM На...

Добавить аргумент при вызове функции при условии
Привет! Появился вопрос - можно ли добавить либо не добавлять аргумент при вызове функции исходя их каких-либо условий? То есть ...

При выполнении функции результат должен показать, сколько строк в таблице TABLE при условии P1= MY_DATE
Здравствуйте помогите с запросом Знатоки плизз! Создать функцию с входным параметром P1(DATE), при выполнении данной функции результат...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru