iSlayter
Новичок
Трудности в составлении запроса [как учесть то, где нет записей?]
Задача: необходимо реализовать интернет-версию обычного рекламного журнала. страница состоит из 2х колонок и 5 рядов. Сложность в том, что на каждой странице разное количество рекламных объявлений (одно объявление может занимать как всю страницу целиком, так и какие-то определенные ячейки, таким образом мы не можем посчитать кол-во страниц в журнале. Нумерация страниц обязательно должна быть такой же, как и в бумажной версии.
Дамп таблицы:
По нему подсчитываю кол-во страниц следующим образом:
SQL запрос #1:
SQL запрос #2:
Таким образом теперь у нас есть все данные для построения панельки постраничной навигации.
К примеру в первой рубрике у меня есть одна страница, со второй по пятую рубрики не хранится ничего, но зато в шестой есть один баннер и нам нужно показать номер этой страницы. С моим запросом #1 я не учитываю того, что даже если в рубрике нет ни одной записи на неё отводится одна страница. И перейдя в шестую рубрику номер страницы будет не 7 (т.к. в первой рубрике 2 страницы), а 3, т.к. не учитывается то, что в рубрике со второй по шестую не смотря на то, что нет записей, но должна быть как-минимум одна страница.
Единственный вариант, который приходит мне на ум: создать пустые записи с номером страницы 1, датой этого месяца и всеми рубриками. Делать это придётся каждый раз. Я считаю, что это неправильно. Т.к. из-за этого лишняя логика в панели администратора появляется. При добавлении первого за месяц баннера в какую-либо рубрику придётся редактировать уже существующую запись. Конечно же, если никто не предложит решения так и поступлю, но этого бы крайне не хотелось, т.к. на мой взгляд это неверно. Буду рад выслушать любые мнения, спасибо за внимание
-~{}~ 11.07.07 15:32:
более того ... блин
какие-нибудь предложения?
Задача: необходимо реализовать интернет-версию обычного рекламного журнала. страница состоит из 2х колонок и 5 рядов. Сложность в том, что на каждой странице разное количество рекламных объявлений (одно объявление может занимать как всю страницу целиком, так и какие-то определенные ячейки, таким образом мы не можем посчитать кол-во страниц в журнале. Нумерация страниц обязательно должна быть такой же, как и в бумажной версии.
Дамп таблицы:
Я решил отвести поле `pagenum` для хранения страницы, которой принадлежит данный баннер.CREATE TABLE `pr_main` (
`id` int(10) NOT NULL auto_increment,
`cid` int(2) NOT NULL default '0',
`title` varchar(255) NOT NULL default '',
`url` varchar(255) NOT NULL default '',
`x` int(1) NOT NULL default '0',
`y` int(1) NOT NULL default '0',
`unique` varchar(255) NOT NULL default '',
`date` date NOT NULL default '0000-00-00',
`clicks` int(6) NOT NULL default '0',
`pagenum` int(2) NOT NULL default '0',
`img_path` varchar(255) NOT NULL default '',
`fullpage` int(1) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;
INSERT INTO `pr_main` VALUES (1, 1, 'Тест', 'http://islayter.com/', 1, 1, '', '2007-07-06', 2, 1, '2007-07/first.jpg', 1);
INSERT INTO `pr_main` VALUES (2, 2, 'Test', 'http://ya.ru/', 2, 1, '', '2007-07-10', 1, 1, '2007-07/Untitled-5.jpg', 0);
INSERT INTO `pr_main` VALUES (3, 2, 'Test', 'http://ya.ru/', 1, 1, '', '2007-07-10', 1, 2, '2007-07/Untitled-5.jpg', 0);
По нему подсчитываю кол-во страниц следующим образом:
SQL запрос #1:
В этом запросе мы получили кол-во страниц до этой рубрики, за июль этого года.SELECT COUNT(DISTINCT `pagenum`) AS `count` FROM `pr_main` WHERE `date` LIKE "2007-07%" AND `cid` < 2
SQL запрос #2:
В этом запросе мы получили кол-во страниц в этой рубрике.SELECT MAX(`pagenum`) as `max` FROM `pr_main` WHERE `date` LIKE "2007-07%" AND `cid` = 2
Таким образом теперь у нас есть все данные для построения панельки постраничной навигации.
К примеру в первой рубрике у меня есть одна страница, со второй по пятую рубрики не хранится ничего, но зато в шестой есть один баннер и нам нужно показать номер этой страницы. С моим запросом #1 я не учитываю того, что даже если в рубрике нет ни одной записи на неё отводится одна страница. И перейдя в шестую рубрику номер страницы будет не 7 (т.к. в первой рубрике 2 страницы), а 3, т.к. не учитывается то, что в рубрике со второй по шестую не смотря на то, что нет записей, но должна быть как-минимум одна страница.
Единственный вариант, который приходит мне на ум: создать пустые записи с номером страницы 1, датой этого месяца и всеми рубриками. Делать это придётся каждый раз. Я считаю, что это неправильно. Т.к. из-за этого лишняя логика в панели администратора появляется. При добавлении первого за месяц баннера в какую-либо рубрику придётся редактировать уже существующую запись. Конечно же, если никто не предложит решения так и поступлю, но этого бы крайне не хотелось, т.к. на мой взгляд это неверно. Буду рад выслушать любые мнения, спасибо за внимание

-~{}~ 11.07.07 15:32:
более того ... блин
этот запрос подсчитывает количество полей pagenum с уникальными записями не учитывая условия where. теперь никак и не подсчитаешь количество страниц до... к этому я готов не был.SELECT COUNT(DISTINCT `pagenum`) AS `count` FROM `pr_main` WHERE `date` LIKE "2007-07%" AND `cid` < 13
какие-нибудь предложения?