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

Запрос к одной таблице, 10 записей к каждому ключу

27.04.2019, 00:32. Показов 962. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть таблица, в ней новости разделенные по категориям. В поле parent прописан id категории.

Возможно ли через один запрос вытащить записи каждой категории но не более 10 записей на категорию. Как сгруппировать записи по полю parent?

Добавлено через 4 минуты
Такой еще вопрос, возможно ли в запросе предварительно высчитать количество ключей, то есть узнать количество уникальных id категорий в общем и далее через условие выполнить выборку. Если количество ключей более 2, выполняем выборку по одному условию и наоброт
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.04.2019, 00:32
Ответы с готовыми решениями:

Выборка из бд последние 10 записей по каждому ключу
Выполняю 5 запросов на выборку, последние 10 записей. Возможно, указать ключи через id in(...). И по каждому выбрать последние 10...

Sqlite left join count - как узнать кол-во записей в другой таблице по ключу
Есть например 2 таблицы. как по ключу (например id совпадает) вытащить данные первой таблицы и кол-во совпадений с другой таблицы?

Поиск записей в одной таблице, где значения ключевого поля не совпадают с полем в другой таблице
Имеется Access XP, надо создать запрос для поиска записей в таблице ТОВАРЫ,где значения ключевого поля (Артикул) не совпадают со значениями...

4
133 / 118 / 34
Регистрация: 04.04.2018
Сообщений: 593
27.04.2019, 10:33
Gerd199, использовать JOIN и затем сгруппировать, так же указав по итогу LIMIT 10. А по второму Вашему вопросу.
SQL
1
2
3
4
5
 SELECT
  COUNT(DISTINCT parent) AS par
FROM TABLE
WHERE
  par > 2 AND тут выбираем по условию OR par < 2 AND выбираем тоже
Так вы хотели? Приложите дамп и покажите запрос, попробую помочь составить.
0
Заблокирован
27.04.2019, 15:35  [ТС]
SQL
1
2
3
4
5
6
7
8
9
10
11
id       parent       title
1          2           title 1
2          2           title 2
3          2           title 3 
4          2           title 4
5          5           title 5
6          5           title 6
7          5           title 8
8          5           title 9 
9          10          title 10
10        11          title 11
В результате необходмо получить с тем условием, что по количество записей не более 2 по полю parent с сортировкой по id

SQL
1
2
3
4
5
6
7
8
9
10
id       parent       title
3          2          title 3 
4          2          title 4
 
7          5          title 8
8          5          title 9 
 
9          10         title 10
 
10        11          title 11
И тут же подключить вторую таблицу в запрос, для вывода данных по категории.

Возможно было бы тупо сразу составить массив категорий, а затем в цикле перебрать массив. Парралельно выполнять запрос ко второй таблице с условием, что ранее parent не встречался. И соответственно выбирать записи новостей по 10 последних штук. Но тогда будет куча запросов к бд. Рассчитываю найти решение при котором это возможно сделать за один запрос.
0
133 / 118 / 34
Регистрация: 04.04.2018
Сообщений: 593
27.04.2019, 18:55
Gerd199, Не знаю, такой результат был не обходим, или нет, в итоге я получил 2 значения из того что выше
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
SELECT
  *
FROM
  (
  SELECT
    *
  FROM
    `tb1`
  JOIN
    (
    SELECT
      COUNT(`parent`) AS cnt,
      parent AS new_parent
    FROM
      `tb1`
    GROUP BY
      `parent`
    ORDER BY
      `id` DESC
  ) AS X
GROUP BY
  X.cnt,
  X.new_parent
ORDER BY
  `cnt` ASC
) AS z
JOIN
  (
SELECT
  id,
  parent
FROM
  `tb2`
) AS X
JOIN
  (
  SELECT
    `id` AS `real_id`,
    `title` AS `real_title`
  FROM
    `tb1`
) AS c
WHERE
  z.`new_parent` = c.`real_id` AND z.`parent` = X.`parent` AND z.cnt >= 2
GROUP BY
  `new_parent` ORDER BY `new_parent` DESC LIMIT 10
я пробовал по другому, у меня не получалось добиться группировки, то есть получал у 11 4 кол-во, ну это из-за JOIN
Поле cnt - это количество записей в таблице tb1,
new_parent - это самое бывшее поле parent.
real_title - это заголовок с tb1
real_id - это ид категории из tb1
Прикладываю скриш-шот, я раскопировал все данные в таблицах, это результат работы.
Подумаю, почитаю, может как-то оптимизирую или кто подскажет как по другому можно такое сделать, тоже буду признателен. Интересно.
Миниатюры
Запрос к одной таблице, 10 записей к каждому ключу  
0
133 / 118 / 34
Регистрация: 04.04.2018
Сообщений: 593
27.04.2019, 18:56
Структура такая же как и Вы предоставили выше в посте.
Группировки именно чтобы получить данные и кол-во на против каждого результата.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.04.2019, 18:56
Помогаю со студенческими работами здесь

Как привязать несколько записей из одной таблица к одной записи в другой таблице
Всем привет! Решил делать курсовой в 1С предприятие (идиот). Суть такая: у меня есть две таблицы студенты и их достижения. Как сделать так,...

Запрос: приравнять значение в одной таблице значению в другой таблице
как можно осуществить запрос : приравнять значение одной таблицы значению в другой таблицы idn | name idf | fname

Дубликаты записей в одной таблице
Здравствуйте! Необходимо найти дубликаты записей в одной таблице по ВСЕМ! значимым полям. Возможно ли это? Делаю так: SELECT n1.* ...

Запрос на количество записей в таблице
У меня есть таблица Прогульщиков: Код|Предмет|Прогульщик|Кол-во часов нужно получить кол-во прогульщиков, Прогульщик (его номер зачетки)...

Запрос на обновление записей в таблице
Суть проблемы такова: БД на Аксесе, запрос на обновление записей в таблице. Выглядит вот так: UPDATE Sotrudnic1 SET Familia =...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru