|
|
|
| Существует две таблицы
1. b_books
В ней:
а). bb_id (порядковый номер книги)
б). bb_name (название книги)
2. bb_price
В ней:
а). bb_id (порядковый номер книги)
б). bb_price(цена книги)
в) data (дата ввода цены)
Итак есть две книги.
№1 Панов
№2 Орлов
И цены:
№1 400р. 22.05.2006
№1 420р. 22.09.2006
№2 200р. 15.06.2006
№2 300р. 19.12.2006
Мне нужно вывести на экран: номер каждый книги, название и цену по наиболее свежей дате вводе.
То есть должно получиться
№1 Панов 420р
№2 Орлов 300р.
мой запрос со всем справляется, кроме правильной цены.
SELECT bb_price.bb_id, b_books.name, bb_price.bb_price, MAX(bb_price.data) AS `Max-data`
FROM b_books INNER JOIN bb_price ON b_books.bb_id = bb_price.bb_id
GROUP BY bb_price.bb_id, b_books.name
ORDER BY Max( bb_price.data )
|
Если использовать FIRST то все работает отлично, то это под windows. а под unix не понимает, как можно изменить этот запрос или дополнить мой (тот что выше) чтобы получить нужный мне результат?
SELECT bb_price.bb_id, b_books.name, FIRST(bb_price.bb_price) AS `First-bb_price`, MAX(bb_price.data) AS `Max-data`
FROM b_books INNER JOIN bb_price ON b_books.bb_id = bb_price.bb_id
GROUP BY bb_price.bb_id, b_books.name
ORDER BY Max( bb_price.data )
|
Спасибо. | |
|
|
|
|
|
|
|
для: Indemion
(07.03.2007 в 12:53)
| | Под UNIX какая версия MySQL используется? | |
|
|
|
|
|
|
|
для: cheops
(07.03.2007 в 13:18)
| | Точно, у хостера не нашел где указанно, но я вызвал phpinfo и получается, что 4.1.12.
На всякий случай оставил там файл, где вызывал phpinfo - вдруг еще какая-либо информация понадобится.
http://www.neopets.com.ru/ppp.php | |
|
|
|
|
|
|
|
для: Indemion
(07.03.2007 в 12:53)
| | JOIN идет не над теми таблицами.
Сперва нужно получить актуальные даты, сгруппированные по ключам книг.
Потом по датам - первичные ключи цен
Потом по ключам цен - сами цены соединить с книгами.
Первичных ключей цен у Вас не видно. | |
|
|
|
|
|
|
|
для: Trianon
(07.03.2007 в 15:57)
| | То есть надо делать 2 запроса? | |
|
|
|
|
|
|
|
для: Indemion
(08.03.2007 в 17:05)
| | Я бы ввел первичный ключ в таблицу цен. Пусть даже суррогатный. Дальше запрос скорее всего можно было бы составить один. Как минимум если сервер 4.1 и выше. | |
|
|
|
|
|
|
|
для: Trianon
(08.03.2007 в 17:13)
| | Сидел до 3-х утра. Не получается ничего. Видимо моих знаних реально не хватает. А можно помочь практическим решением? Какой первичный ключ? Или еще какой практический совет по решению этой задачи. Спасибо. | |
|
|
|
|
|
|
|
для: Indemion
(09.03.2007 в 11:56)
| | Пока работает вот это, но считаю, что можно задачу упростить.
SELECT *
FROM b_books INNER JOIN bb_price ON bb_price.bb_id = b_books.bb_id
WHERE data = (SELECT MAX(data) FROM `bb_price` WHERE bb_price.bb_id = b_books.bb_id)
|
| |
|
|
|
|
|
|
|
для: Indemion
(09.03.2007 в 11:56)
| |
--
-- Структура таблицы `b_books`
--
CREATE TABLE `b_books` (
`bb_id` int(11) NOT NULL auto_increment,
`bb_name` varchar(255) NOT NULL,
PRIMARY KEY (`bb_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;
--
-- Дамп данных таблицы `b_books`
--
INSERT INTO `b_books` (`bb_id`, `bb_name`) VALUES
(1, 'Панов'),
(2, 'Орлов');
-- --------------------------------------------------------
--
-- Структура таблицы `b_price`
--
CREATE TABLE `b_price` (
`pr_id` int(11) NOT NULL auto_increment,
`pr_book_id` int(11) NOT NULL,
`pr_price` decimal(6,2) NOT NULL,
`pr_date` datetime NOT NULL,
PRIMARY KEY (`pr_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;
--
-- Дамп данных таблицы `b_price`
--
INSERT INTO `b_price` (`pr_id`, `pr_book_id`, `pr_price`, `pr_date`) VALUES
(1, 1, '400.00', '2006-05-22 00:00:00'),
(2, 1, '420.00', '2006-09-05 00:00:00'),
(3, 2, '200.00', '2006-06-15 00:00:00'),
(4, 2, '300.00', '2006-12-19 00:00:00');
|
SELECT bb_id, bb_name, pr_id, pr_price, pr_date
FROM
(SELECT pr_book_id AS aid, MAX(pr_date) AS mdt
FROM b_price GROUP BY pr_book_id
) AS a_price
JOIN b_price
ON date = mdt
RIGHT JOIN b_books ON bb_id=pr_book_id
|
bb_id bb_name pr_id pr_price pr_date
-----+-------+-----+--------+-------------------
1 Панов 2 420.00 2006-09-05 00:00:00
2 Орлов 4 300.00 2006-12-19 00:00:00
|
| |
|
|
|
|
|
|
|
для: Trianon
(09.03.2007 в 12:38)
| | Спасибо. Буду комбинировать со своим вариантом для упрощения запроса. | |
|
|
|