SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 10.06.2011 15:03:42

D.Demon
Участник
Зарегистрирован: 10.06.2011
Сообщений: 10

LEFT JOIN таблицы с условием выборки

Есть таблица продуктов:

CREATE TABLE `t_product` (
  `p_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `cat_id` int(6) NOT NULL DEFAULT '0',
  `b_id` int(6) NOT NULL DEFAULT '1',
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`p_id`)
);

INSERT INTO t_product(p_id, cat_id, b_id, name) VALUES(1, 0, 0, 'Продукт1'),(2, 0, 0, 'Продукт2'),(3, 0, 0, 'Продукт3');

Есть таблица цен для продуктов:

CREATE TABLE `t_price` (
  `p_id`  int(11) NOT NULL DEFAULT '0',
  `price` float(8,2) default NULL,
  `date_end` datetime default NULL,
  `sklad` int(6) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
);


INSERT INTO t_price(id, price, date_end, sklad) VALUES(1, 100, '2011-09-09 00:00:00', 1),(1, 150, '2011-09-10 00:00:00', 2),(1, 50, '2011-09-10 00:00:00', 1),(2, 130, '2011-09-10 00:00:00', 2),(1, 150, '2011-09-10 00:00:00', 2),(3, 200, '2011-09-10 00:00:00', 2);


Мне надо сделать такую выборку в которой я получу список продуктов с двумя условиями: минимальный 'sklad' и 'price' при условии что время прайса не вышло. Есть еще таблица с названиями склада

CREATE TABLE IF NOT EXISTS `t_product_sklad` (
  `sklad_id` int(11) NOT NULL auto_increment,
  `name` varchar(255) default NULL,
  `sortby` int(11) default '0',
  `weight` int(11) NOT NULL default '0',
  `show_status` enum('1','0') NOT NULL default '0',
  `def` enum('1','0') character set cp1251 collate cp1251_bin NOT NULL default '0',
  PRIMARY KEY  (`sklad_id`)
);

--
-- Дамп данных таблицы `t_product_sklad`
--

INSERT INTO `t_product_sklad` (`sklad_id`, `name`, `sortby`, `weight`, `show_status`, `def`) VALUES
(1, 'Есть в наличии', 1, 1, '1', '0'),
(2, 'Наличие уточняйте', 3, 10, '1', '1'),
(3, 'Осталось мало', 2, 1, '1', '0'),
(4, 'Нет в наличии', 4, 100, '0', '0');


Другими словами для одного продукта запрос выглядит так:

SELECT ip.price_out as price, ip.sklad_id, ps.name as skladname
FROM t_imp_product as ip
INNER JOIN t_product_sklad as ps ON ps.sklad_id=ip.sklad_id
WHERE ip.p_id = '$p_id'
AND date_end > CURRENT_TIMESTAMP
AND ip.price_out > 0
ORDER BY ps.sortby, ip.price_out
LIMIT 1;

Как получить это для выборки?

Неактивен

 

#2 22.06.2011 17:04:43

devart
ISV
MySQL Enterprise Gold Partner
Откуда: www.devart.com
Зарегистрирован: 12.04.2010
Сообщений: 22

Re: LEFT JOIN таблицы с условием выборки

Условие не совсем понятно:

получу список продуктов с двумя условиями: минимальный 'sklad' и 'price'

Необходимо найти мин. общую сумму 'sklad' и 'price' по продукту?

Неактивен

 

#3 23.06.2011 12:19:43

memba
Участник
Зарегистрирован: 11.06.2011
Сообщений: 12

Re: LEFT JOIN таблицы с условием выборки

Приведите пример что в таблицах, и что хотите получить

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson