|
|
|
|
CREATE TABLE IF NOT EXISTS `test` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`product_id` int(10) NOT NULL,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
INSERT INTO `test` (`id`, `product_id`, `name`) VALUES
(1, 1, 'short'),
(2, 1, 'very_long'),
(3, 2, 'short'),
(4, 2, 'very_long'),
(5, 3, 'short'),
(6, 4, 'very_long'),
(7, 5, 'very_long'),
(8, 5, 'short');
|
Подскажите пожалуйста, как выбрать (product_id / самый длинный name для него) одним запросом (условно)
Т.е. правильный результат:
1/very_long
2/very_long
3/short
4/very_long
5/very_long | |
|
|
|
|
|
|
|
для: Dante_FX
(02.02.2015 в 22:16)
| | Ну если ответ нужен как в правильном результате, то можно вот так:
-- <?
SELECT
product_id,
( SELECT
name
FROM
test
WHERE
product_id = t1.product_id
ORDER BY
length(name) DESC
LIMIT 1
) AS name
FROM
test AS t1
GROUP BY
product_id
|
А если ответ должен включать id записи в которой было найдено самое длинное имя, то можно так:
-- <?
SELECT
t1.*
FROM
test AS t1
JOIN
( SELECT
product_id,
max(length(name)) AS m_length
FROM
test
GROUP BY
product_id
) AS t2
ON
t1.product_id = t2.product_id
AND
length(name) = m_length
|
P.S. Все б так вопрос задавали - сразу с дампом.... Накатил и тестируй себе сколько влезет =))) | |
|
|
|
|
|
|
|
для: Sfinks
(02.02.2015 в 22:40)
| | Спасибо за решение! | |
|
|
|
|
|
|
|
для: Sfinks
(02.02.2015 в 22:40)
| | >P.S. Все б так вопрос задавали - сразу с дампом.... Накатил и тестируй себе сколько влезет =)))
Чем оно реже - тем оно счастье :) | |
|
|
|
|
|
|
|
для: Trianon
(02.02.2015 в 23:29)
| | Я просто перед тем как год назад пропасть отсюда, постоянно от всех этого добивался. Замучился всем одно и то же повторять. А тут раз, и все сразу! ))) | |
|
|
|