Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 20

Поиск минимума в 2 столбцах разных таблиц

22.07.2013, 09:59. Показов 1320. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе утро.
Возникла задача поиска min значения, но не так все просто (во всяком случае для меня):
У товара есть две цены: сама цена и цена со скидкой (эти цены хранятся в разных таблицах). Если скидка у товара есть, то "реальной" ценой считается цена со скидкой. Если скидки нет - в таблицу записывается значение "-1" и оно просто игнорируется. Необходимо найти min значение цен товаров, т.е. поиск нужно осуществлять среди "реальных" цен (если сидка есть: "реальная" цена - цена со скидкой, если нет - сама цена).
После этого у пользователя есть возможность установить фильтр диапозона цен (min и max) и система должна отобрать товары, чьи "реальные"цены попадают в установленный диапозон.
Если у кого-то есть идеи, как разрешить такую задачу - буду рада помощи.
Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.07.2013, 09:59
Ответы с готовыми решениями:

Запрос на поиск записи в разных столбцах одной БД
Здравствуйте, не подскажите как реализовать запрос, нужно посчитать количество записи в БД которая находится в разных столбцах. Для...

Выборка из разных таблиц и поиск расхождений
Доброго времени суток! Помогите, пожалуйста, с помощью формул решить такую задачу. Есть 3 таблицы - табель выхода сотрудников,...

Как организовать поиск по полям из разных таблиц?
Есть база Access, в ней несколько таблиц объединенных полем ID (уникальный номер) Вопрос в том, как организовать поиск по полям из разных...

6
133 / 66 / 0
Регистрация: 29.10.2012
Сообщений: 306
22.07.2013, 11:42
Цитата Сообщение от lara_ Посмотреть сообщение
Если скидки нет - в таблицу записывается значение "-1" и оно просто игнорируется
если скидки нет то значение цены со скидкой я предпологаю Null..и можно игнорировать его по этому условию, как бы если значение со скидкой Null, берем цену без скидки. И куда записывается значение -1 не совсем понятно, и с какой целью, фильтр между минимальным и максимальными значениями устанавливается оператором BEETWEN
тяжело составить запрос не видя схему данных, мб выложите ее?
0
 Аватар для Crast
72 / 72 / 5
Регистрация: 10.02.2013
Сообщений: 434
23.07.2013, 08:00
Вы не указали:
1. Есть ли несколько цен на один и тот же товар, если есть то какие нибудь временные ограничения на действия цены;
2. Минимальное искать среди всех товаров всех цен, или для каждого товара.
Запрос, который находит минимальное среди всех цен по каждому товару:
MySQL
1
2
3
SELECT table1.ИдТовара, min(IF( ЦенаСоСкидкой = -1, Цена, ЦенаСоСкидкой))  AS МинЦена
FROM table1, table2 WHERE table1.ИдТовара = table2.ИдТовара
GROUP BY  table1.ИдТовара
0
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 20
20.08.2013, 13:50  [ТС]
Знаю, прошло уже много времени, НО эту задачу так и не смогла разрешить.
Запрос
MySQL
1
SELECT min(IF( OldPrice = -1, Price, OldPrice))  AS min FROM tblArticles, tblOldPrice WHERE CategoryID='{$cat_id}'  and tblArticles.Id = tblOldPrice.ArticleID GROUP BY  tblArticles.Id
выводит min значение.
Аналогично ищу max.
После этого у пользователя есть возможность установить фильтр диапозона цен (min и max) и система должна отобрать товары, чьи "реальные"цены попадают в установленный диапозон.
То, что сейчас использую
MySQL
1
select * from tblArticles,tblArticleInfo,tblOldPrice where  tblOldPrice.ArticleID=tblArticles.Id and tblArticleInfo.ArticleID=tblArticles.Id  AND tblArticles.CategoryID='{$cat_id}'  and (((Price>=$min) and (Price<=$max)) or((OldPrice>=$min) and (OldPrice<=$max)))
Условие составлено некорректно, т.к. если есть цена со скидкой - то это считается РЕАЛЬНОЙ ценой, если нет - реальная цена - это сама цена. И отбор данных необходимо осуществлять не по двум полям Price и OldPrice(как сейчас), а только по одному(или Price, или OldPrice).
Может есть какая-то конструкция, которая позволит использовать нужное поле? Что-то вроде (IF( OldPrice = -1, Price, OldPrice)) только для составления условия where.
0
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
20.08.2013, 13:57
MySQL
1
2
3
4
5
6
select * 
from tblArticles a
join tblOldPrice o on o.ArticleID=a.Id 
join tblArticleInfo i on i.ArticleID=a.Id
where a.CategoryID='{$cat_id}'  
  and if(o.OldPrice<0,a.Price,o.OldPrice) between $min and $max
1
Заблокирован
20.08.2013, 15:09
Цитата Сообщение от lara_ Посмотреть сообщение
IF( OldPrice = -1
Потому что не должно быть все просто. Иначе жизнь станет чуть более чем полностью унылой. А так и заняти есть и работа вроде кипит по извлечению мин и макс.

Цена * -1 = -Цена

Вот вам и мин. Уму непостижимо как до такого вообще можно было догадаться. Только специально изыскивая способы навредить врагу.

Добавлено через 6 минут
Цитата Сообщение от lara_ Посмотреть сообщение
(если сидка есть: "реальная" цена - цена со скидкой, если нет - сама цена).
А если бы скидка записывалась в float в нормализованном виде, то есть в дипапазоне от 0 до 1, то

Цена * скидку = цена со скидкой

25 * 0,85 =

Нет скидки? Пишем норму = 1. Цена * 1 = цена.

Раздаем неликвиды за бесплатно? Пишем 0.

И никаких "если". Все считается автоматически в самом запросе типа fob_price * discount as street_price

Добавлено через 2 минуты
Это называется допустили программиста до БД. -1 на самом деле это TRUE. Эквивалентно 1. FALSE это 0. Но не NULL!
0
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 20
20.08.2013, 15:30  [ТС]
Всем большое спасибо.
Написала (скопировала) запрос у cygapb-007.
Всем большое спасибо за помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.08.2013, 15:30
Помогаю со студенческими работами здесь

В матрице выбрать n элементов, стоящих в разных строках и разных столбцах, чтобы их сумма была минимальной
Примерный алгоритм как можно реализовать это

В матрице выбрать n элементов в разных строках и разных столбцах так, чтобы их сумма была минимальной
Помогите,пожалуйста Добавлено через 2 часа 23 минуты примерный алгоритм как это можно сделать

Автосинхронизация таблиц из разных баз разных структур
Стоит такая задача Есть две базы в различных СУБД серверах, база1 и база2. Необходимо реализовать такой механизм. Создать в базе1 ...

Выборка и объединение из 2 разных таблиц и 2 разных полей
Подскажите, пожалуйста, как составить запрос. Мне необходимо из 2 таблиц выбрать одинаковые значения полей userid и fuserid. SELECT...

Разные условия в разных столбцах
Всем привет! У меня очередной вопрос по выборке. Предположим есть простенькая таблица ID | номер | дата регистрации 111 Ц1111...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. На мобильном - сканируйте QR-код. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru