Привет всем сегодня я получил, чтобы проблема ..Mysql заказ по группировке с
первая вещь, у меня есть две таблицы каждой таблицы у меня есть столбец «product_seq_id» и я присоединился к таблице, используя один и тот же «product_seq_id» в второй таблице есть несколько строк для «product_seq_id» я хочу только один с ниже условием
- table2.date_start не быть пустым
- table2.date_start равен «0000-00-00» или table2.date_start < = CURDATE()
- table2.date_end равно «0000-00-00» или table2.date_start> = CURDATE()
- получить высокий table2.priority, если 2 или более строк совпадают в тот же день
Я уже сделал некоторую работу .. но проблема заключается в том, что она не принимает наивысший приоритет номер при заказе колонки сгруппированы
// Мой запрос
SELECT
psp . *, pcp . *
FROM
sk_product_category_path pcp
left join
sk_product_special_price psp ON (psp.product_seq_id = pcp.product_seq_id)
where
pcp.category_seq_id = 146
AND psp.product_seq_id IS NOT NULL
AND CASE
WHEN
psp.date_start IS NOT NULL
THEN
(psp.date_start = '0000-00-00'
OR psp.date_start <= CURDATE())
AND (psp.date_end = '0000-00-00'
OR psp.date_end >= CURDATE())
ELSE 1 = 1
END
group by psp.product_seq_id
order by psp.priority desc
Result Came for above code:
# product_special_price_seq_id, product_special_price, date_start, date_end, priority, product_seq_id, product_category_path_seq_id, product_seq_id, category_seq_id
2309 123123 0000-00-00 0000-00-00 0 3196 1 3196 146
2307 12313 0000-00-00 0000-00-00 0 3197 3 3197 146
Result I wanted:
# product_special_price_seq_id, product_special_price, date_start, date_end, priority, product_seq_id, product_category_path_seq_id, product_seq_id, category_seq_id
2309 12200 0000-00-00 0000-00-00 1 3196 2 3196 146
2307 12313 0000-00-00 0000-00-00 0 3197 3 3197 146
// Таблица данные
CREATE TABLE IF NOT EXISTS `sk_product_category_path` (
`product_category_path_seq_id` int(11) NOT NULL AUTO_INCREMENT,
`product_seq_id` int(11) NOT NULL,
`category_seq_id` int(11) NOT NULL,
PRIMARY KEY (`product_category_path_seq_id`),
UNIQUE KEY `product_seq_id` (`product_seq_id`,`category_seq_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
INSERT INTO `sk_product_category_path` (`product_category_path_seq_id`, `product_seq_id`, `category_seq_id`) VALUES
(1, 3196, 146),
(2, 3197, 146),
(3, 3198, 146);
CREATE TABLE IF NOT EXISTS `sk_product_special_price` (
`product_special_price_seq_id` int(11) NOT NULL AUTO_INCREMENT,
`product_special_price` bigint(20) DEFAULT NULL,
`date_start` date DEFAULT NULL,
`date_end` date DEFAULT NULL,
`priority` int(11) DEFAULT NULL,
`product_seq_id` int(11) NOT NULL,
PRIMARY KEY (`product_special_price_seq_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
INSERT INTO `sk_product_special_price` (`product_special_price_seq_id`, `product_special_price`, `date_start`, `date_end`, `priority`, `product_seq_id`) VALUES
(1, 12313, '0000-00-00', '0000-00-00', 0, 3197),
(2, 12200, '2014-02-11', '2014-02-11', 1, 3197),
(3, 123123, '0000-00-00', '0000-00-00', 0, 3196);
Вы используете MySQL 'группу by' расширения, что позволяет неагрегированных столбцы в' select'-запроса агрегации. Поскольку MySQL * явно * предупреждает об этом, когда значения не равны во всех строках в группе (http://dev.mysql.com/doc/refman/5.7/en/group-by-extensions.html), я подумайте, что вы должны исправить свой запрос, чтобы избежать этого неподдерживаемого поведения. –
Проблема с вашей группой ... большинство других языков SQL на самом деле выдают ошибку, а не выполняют то, что у вас есть. Оператор group должен содержать все строки в предложении select, который не является совокупностью какой-либо формы. выберите psp. *, pcp. * и только группа psp.product_seq_id не будет работать здесь ...MySQL просто глупо, чтобы попытаться запустить его в любом случае (возвращает неверные результаты вместо ошибки). – Twelfth