powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка и группировка по двуи таблицам
6 сообщений из 6, страница 1 из 1
Выборка и группировка по двуи таблицам
    #38787413
nuklon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно вывести по 3 товара сгруппированные по категориям. Пример:

Дверные ручки:
ручка_1, ручка_2, ручка_3

Дверные замки:
замок_1, замок_2, замок_3
...

никак не получается, сканопатил такой запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT a.`id`, a.`title`, a.`url`,  a.`img`,   
           b.`id` AS `bid`, b.`title` AS `btitle`, b.`price`, b.`discount`, b.`new`, b.`img` AS `bimg` 
  FROM `$tAccesories` a 
    LEFT JOIN (
        SELECT `id`, `title`, `price`, `discount`, `new`, `img`, `parent_ext` 
         FROM `$tAccesories_child` LIMIT 3) b 
    ON (b.`parent_ext` = a.`id`)

, думал решил, но на второй ступеньке (дверные замки) работает не корректно, а именно список товаров этого каталога не выводится. LIMIT 3 останавливает выборку для остальных категорий, но убрать тоже не могу, т.к, товаров может быть тыщи и они мне не к чему в этом запросе. Даже если средствами РНР выведу 3 для каждого каталога, то вывод всех товаров не разумно.

Думал еще в LIMIT передавать переменную, которая меняется пр переходе к последующему каталогу в запросе, но не получилось у меня ни переменную создать, ни тем более использовать ее.

Помогите составить правильный запрос. Если можно без процедур и пр.
...
Рейтинг: 0 / 0
Выборка и группировка по двуи таблицам
    #38787447
Фотография Станислав Клевцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nuklonНужно вывести по 3 товара сгруппированные по категориям. Пример:

Дверные ручки:
ручка_1, ручка_2, ручка_3

Дверные замки:
замок_1, замок_2, замок_3
...

никак не получается, сканопатил такой запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT a.`id`, a.`title`, a.`url`,  a.`img`,   
           b.`id` AS `bid`, b.`title` AS `btitle`, b.`price`, b.`discount`, b.`new`, b.`img` AS `bimg` 
  FROM `$tAccesories` a 
    LEFT JOIN (
        SELECT `id`, `title`, `price`, `discount`, `new`, `img`, `parent_ext` 
         FROM `$tAccesories_child` LIMIT 3) b 
    ON (b.`parent_ext` = a.`id`)

, думал решил, но на второй ступеньке (дверные замки) работает не корректно, а именно список товаров этого каталога не выводится. LIMIT 3 останавливает выборку для остальных категорий, но убрать тоже не могу, т.к, товаров может быть тыщи и они мне не к чему в этом запросе. Даже если средствами РНР выведу 3 для каждого каталога, то вывод всех товаров не разумно.

Думал еще в LIMIT передавать переменную, которая меняется пр переходе к последующему каталогу в запросе, но не получилось у меня ни переменную создать, ни тем более использовать ее.

Помогите составить правильный запрос. Если можно без процедур и пр.


Добавьте, пожалуйста, структуру таблиц.

...Нужно вывести по 3 товара сгруппированные по категориям - Нет группировки по текстовому полю title.
...
Рейтинг: 0 / 0
Выборка и группировка по двуи таблицам
    #38787451
nuklon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав Клевцов, да, конечно. Таблицы две связаны внешним ключом (id каталога с parent_ext товара), а структуры примерно одинаковые, вот:
Таблица категорий
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE TABLE IF NOT EXISTS `accessories` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(100) DEFAULT '',
  `parent_id` int(11) unsigned DEFAULT '0',
  `corder` int(11) unsigned DEFAULT '0',
  `active` tinyint(1) unsigned DEFAULT '0',
  `level` tinyint(2) unsigned DEFAULT '0',
  `admin` tinyint(1) unsigned DEFAULT '0',
  `descr` text,
  `url` varchar(255) DEFAULT NULL,
  `img` varchar(100) DEFAULT NULL,
  `datetime` datetime DEFAULT NULL,
  `sKeywords` varchar(90) DEFAULT NULL,
  `sDescription` varchar(150) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

и таблица товаров
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE TABLE IF NOT EXISTS `accessories_child` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(100) DEFAULT '',
  `corder` int(11) unsigned DEFAULT '0',
  `active` tinyint(1) unsigned DEFAULT '1',
  `new` tinyint(1) unsigned DEFAULT '0',
  `instock` tinyint(1) unsigned DEFAULT '0',
  `discount` tinyint(3) unsigned DEFAULT '0',
  `price` mediumint(7) unsigned DEFAULT '0',
  `descr` text,
  `url` varchar(255) DEFAULT NULL,
  `img` varchar(100) DEFAULT NULL,
  `datetime` datetime DEFAULT NULL,
  `popular` tinyint(3) unsigned DEFAULT '0',
  `parent_ext` int(11) unsigned DEFAULT NULL,
  `sKeywords` varchar(90) DEFAULT NULL,
  `sDescription` varchar(150) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `to_cat` (`parent_ext`),
  CONSTRAINT `accessories_child_ibfk_1` FOREIGN KEY (`parent_ext`) REFERENCES `accessories` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
...
Рейтинг: 0 / 0
Выборка и группировка по двуи таблицам
    #38787452
nuklon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав Клевцов...Нужно вывести по 3 товара сгруппированные по категориям - Нет группировки по текстовому полю title.так я пытаюсь сгруппировать по полю parent_ext
...
Рейтинг: 0 / 0
Выборка и группировка по двуи таблицам
    #38787631
mikhalken
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, как я вижу, с запросом особо желающих помочь нет. Мой совет - если хочешь универсальный алгоритм, сделай процедурку, которая циклом по курсору из категорий создаст динамический запрос из нескольких "UNION ALL", а после чего уже выполнит его.
...
Рейтинг: 0 / 0
Выборка и группировка по двуи таблицам
    #38787653
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nuklon,

1. посмотрите ФАК по быборке первых/последних записей в групе.
Оттуда надо вытянуть код по нумерации.
примерный результат

тип, товар, номер
замок, замок_123, 1
замок, замок_345, 2
замок, замок_150, 3
замок......
.....
дверь, дверь_543, 1
дверь, дверь_345, 2
дверь, дверь_211, 3
дверь.....

2. Скорее всего вам надо придумать в каком порядке
нумеровать похожие детали -- по рейтингу, по алфавиту...?
Порядок вставьте в пункт 1.

3. затем "схлопните" категории:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select
  tip,
  max(if num=1, towar, null) towar_1,
  max(if num=2, towar, null) towar_2,
  max(if num=3, towar, null) towar_3
from
(
запрос из пункта 1
) z
group by tip
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка и группировка по двуи таблицам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]