Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка длинных/коротких строк для каждого id
 
 автор: Dante_FX   (02.02.2015 в 22:16)   письмо автору
 
 


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

  Ответить  
 
 автор: Sfinks   (02.02.2015 в 22:40)   письмо автору
 
   для: Dante_FX   (02.02.2015 в 22:16)
 

Ну если ответ нужен как в правильном результате, то можно вот так:
-- <?

SELECT
  product_id
,
  (  
SELECT 
       name 
     FROM 
       test 
     WHERE 
       product_id 
t1.product_id 
     ORDER BY 
       length
(nameDESC 
     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. Все б так вопрос задавали - сразу с дампом.... Накатил и тестируй себе сколько влезет =)))

  Ответить  
 
 автор: Dante_FX   (02.02.2015 в 23:18)   письмо автору
 
   для: Sfinks   (02.02.2015 в 22:40)
 

Спасибо за решение!

  Ответить  
 
 автор: Trianon   (02.02.2015 в 23:29)   письмо автору
 
   для: Sfinks   (02.02.2015 в 22:40)
 

>P.S. Все б так вопрос задавали - сразу с дампом.... Накатил и тестируй себе сколько влезет =)))

Чем оно реже - тем оно счастье :)

  Ответить  
 
 автор: Sfinks   (03.02.2015 в 09:13)   письмо автору
 
   для: Trianon   (02.02.2015 в 23:29)
 

Я просто перед тем как год назад пропасть отсюда, постоянно от всех этого добивался. Замучился всем одно и то же повторять. А тут раз, и все сразу! )))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования