Почему не работает условие сравнения по датам ? (((

Ekklipce

Новичок
Почему не работает условие сравнения по датам ? (((

Условие [general.date_issue < discount_vol.date_change] не работает какого х.я..

Даже при [general.date_issue > discount_vol.date_change] должно что-то показать
<
даты при 83
general.date_issue = '2004-02-18'
discount_vol.date_change : 2004-01-31, 2004-02-31, 2004-03-31
>

при знаке меньше "<" - показывает все..
при знаке больше ">" - не показывает ничего..

то есть в обоих случаях не работает сравнение..

в чем ошибка ?.. это вообще ошибка ??

SELECT discount_vol.sum AS sum, discount_vol.rate AS rate, discount_vol.date_change, general.date_issue
FROM discount_vol, general
WHERE general.magazine = discount_vol.id
AND general.magazine = '83'
AND general.date_issue < discount_vol.date_change
GROUP BY sum

discount_vol :
id, date_change, sum, rate

general :
magazine, date_issue
 

Ekklipce

Новичок
Originally posted by Бресь Сергей
SHOW CREATE TABLE general;
покажи...
CREATE TABLE `general` (
`id` int(11) unsigned NOT NULL auto_increment,
`magazine` int(11) NOT NULL default '0',
`date_issue` date NOT NULL default '0000-00-00',
`number` int(11) NOT NULL default '0',
`lang` int(11) NOT NULL default '0',
`x` int(11) NOT NULL default '0',
`y` int(11) NOT NULL default '0',
`part` int(11) NOT NULL default '0',
`location` int(11) NOT NULL default '0',
`color` int(11) NOT NULL default '0',
`position` int(11) NOT NULL default '0',
`page` int(11) NOT NULL default '0',
`zone` int(11) NOT NULL default '0',
`sector` int(11) NOT NULL default '0',
`category` int(11) NOT NULL default '0',
`model` varchar(30) NOT NULL default '',
`trademark` varchar(20) NOT NULL default '',
`producer` varchar(20) NOT NULL default '',
`advertiser` varchar(20) NOT NULL default '',
`city` varchar(20) NOT NULL default '',
`address` varchar(100) NOT NULL default '',
`phone` varchar(50) NOT NULL default '',
`block` int(11) NOT NULL default '0',
`image_id` varchar(20) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1118 ;


только зачем он тебе ))
 

slach

Новичок
а с чего вдруг ты сравниваешь строку и дату
которая в результате преобразоывается к строке (если мне память не отшибло)

ну и читай мануал про сравнение двух строк в MySQL, может быть в этом кроется загвоздка
 

Сергей123

Новичок
Да нет, видимо date_change тоже DATE...
Я ещё группировку не совсем понял в показанном запросе...
А показанные значения date_change - у них что, у всех discount_vol.id равны 83?
 

Ekklipce

Новичок
Originally posted by Бресь Сергей
Да нет, видимо date_change тоже DATE...
Я ещё группировку не совсем понял в показанном запросе...
А показанные значения date_change - у них что, у всех discount_vol.id равны 83?
Верно..!, выборка только всех конкретных discount_vol.id,
в частном случае для 83

2 slach : сравниваються 2 даты :)...

2 Бресь Сергей - групировка по числовому полю.. вроде простов се
 

Сергей123

Новичок
Ekklipce
не понимаю, где проблема...
У меня при знаке > выводит запись с discount_vol.date_change равной 31 января, как и должно.

Про группировку не понял таки... Агрегатных ф-й в запросе нет, в SELECTе ещё данные, кроме группируемого поля... Зачем тут GROUP BY?
 

Ekklipce

Новичок
в предыдущем случае не работало оно от того что перепутал год - 2003 вместо 2004 =))))))) бывает...

А полная задача звучит так :

Итак, исходные данные :

Table general (только используемые поля)
id---magazine---date_issue--прочие поля..
1----83-----------2004-02-18--...
2----83-----------2004-02-18--...
3----83-----------2004-02-18--...
4----83-----------2004-02-18--...

Table discount_vol (скидки, разные к примеру за каждый месяц)
id------date_change--sum---rate
83-----2004-01-01---2000--40
83-----2004-01-01---2500--45
83-----2004-02-01---2000--30
83-----2004-02-01---2500--35
83-----2004-02-01---3000--40
83-----2004-03-01---2500--25
83-----2004-03-01---2500--20
83-----2004-03-01---3000--15

Для поля 83 надо получить данные из discount_vol по дате, меньшей чем general.magazine, то есть

id------date_change--sum---rate
83-----2004-02-01---2000--30
83-----2004-02-01---2500--35
83-----2004-02-01---3500--30

помогите с запросом.. наверно юзать нажно MAX(discount_vol.date_change),
с условием типа general.date_issue > discount_vol.date_change
AND discount_vol.date_change = MAX(discount_vol.date_change)

вот запрос, который выводит все..

SELECT discount_vol.sum AS sum, discount_vol.rate AS rate, discount_vol.date_change
FROM discount_vol, general
WHERE general.magazine = discount_vol.id
AND discount_vol.id = '83'
AND general.date_issue > discount_vol.date_change
GROUP BY discount_vol.sum

при таком запросе выводяться данные по самым первым датам..

id------date_change--sum---rate
83-----2004-01-01---2000--40
83-----2004-01-01---2500--35
83-----2004-02-01---3000--35

НУЖНО по датам ближайщим к general.magazine - 2004-02-18 - но меньше их, то есть :

id------date_change--sum---rate
83-----2004-02-01---2000--30
83-----2004-02-01---2500--35
83-----2004-02-01---3500--30

в конечном итоге сумма sum будет уникальной, по ней и группирую, иначе - большое количество результатовполучаеться.. чуть ли не на каждую запись в general
 

Сергей123

Новичок
Извини, я - пас.
Вот за это:
>> в предыдущем случае не работало оно от того
>> что перепутал год - 2003 вместо 2004 =))))))) бывает...
 

Ekklipce

Новичок
Originally posted by Бресь Сергей
Извини, я - пас.
Вот за это:
>> в предыдущем случае не работало оно от того
>> что перепутал год - 2003 вместо 2004 =))))))) бывает...
... слушай, может меня с форума исключить за это ?.. год перепутал, уже все ?.. помог бы лучше
 
Сверху