powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
17 сообщений из 17, страница 1 из 1
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
    #38485975
Shalfey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Необходимо в запросе:

авторSELECT SQL_CALC_FOUND_ROWS a.`Message_ID`, a.`User_ID`, a.`IP`, a.`UserAgent`, a.`LastUser_ID`, a.`LastIP`, a.`LastUserAgent`, a.`Priority`, a.`Parent_Message_ID`, a.`ncTitle`, a.`ncKeywords`, a.`ncDescription`, sub.`Subdivision_ID`, CONCAT( '', sub.`Hidden_URL`) as Hidden_URL, cc.`Sub_Class_ID`, cc.`EnglishName`, a.`Checked`, a.`Created`, a.`Keyword`, a.`LastUpdated` + 0 AS LastUpdated, a.Name, a.Vendor, a.ItemID, a.Price , tbl2571.ShopCurrency_Name AS Currency, tbl2571.ShopCurrency_ID AS Currency_id, tbl2571.`Value` AS Currency_value , a.PriceMinimum, tbl2573.ShopCurrency_Name AS CurrencyMinimum, tbl2573.ShopCurrency_ID AS CurrencyMinimum_id, tbl2573.`Value` AS CurrencyMinimum_value , a.Image, tbl2575.ShopUnits_Name AS Units, tbl2575.ShopUnits_ID AS Units_id, tbl2575.`Value` AS Units_value , a.StockUnits, a.ImportSourceID, a.TopSellingMultiplier, a.TopSellingAddition, a.VAT, a.AmountOfTraffic, a.FullName, a.TimeWork, a.CountLicenses, a.OperatingSystem, a.Capacity, a.Language, a.TypeLicenses, a.TypeOrganization, a.ID_1C, a.DeliveryType, a.Articul, a.DescriptionProd, a.DecipheringLicense, a.Model, a.VendorCartridges, a.ProductAvailability, a.TypeCartridges, a.ForPrinters, a.Refillable, a.Compatibility, a.USD_Price, a.Price AS Price, a.Currency AS Currency FROM (`Message2081` AS a ) LEFT JOIN `Subdivision` AS sub ON sub.`Subdivision_ID` = a.`Subdivision_ID` LEFT JOIN `Sub_Class` AS cc ON cc.`Sub_Class_ID` = a.`Sub_Class_ID` LEFT JOIN `Classificator_ShopCurrency` AS tbl2571 ON a.`Currency` = tbl2571.ShopCurrency_ID LEFT JOIN `Classificator_ShopCurrency` AS tbl2573 ON a.`CurrencyMinimum` = tbl2573.ShopCurrency_ID LEFT JOIN `Classificator_ShopUnits` AS tbl2575 ON a.`Units` = tbl2575.ShopUnits_ID WHERE 1 AND a.`Parent_Message_ID` = '0' AND sub.`Catalogue_ID` = '1' AND a.`Subdivision_ID` = '371' AND a.`Sub_Class_ID` = '571' AND a.`Checked` = 1 AND ( (a.Price>=1000 AND a.Price<=2000) ORDER BY Message_ID LIMIT 0, 15


,модернизировать выделеный цветом текст, т.е. a.Price получилось равно результату запроса:
авторa.Price * ( SELECT `Rate` FROM `Message223` WHERE `Currency`=a.`Currency` ORDER BY MAX(`Message_ID`) )
...
Рейтинг: 0 / 0
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
    #38485992
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Он издевается?
...
Рейтинг: 0 / 0
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
    #38486000
Shalfey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

А что SQL не позволяет производить подобные операции?
...
Рейтинг: 0 / 0
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
    #38486025
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имею в виду оформление вопроса.
Посмотри другие темы. Как люди форматируют запросы. Какие теги используют.
А в твоей лапше разбираться нет никакого желания. И искать, где ты там, что и каким цветом выделил.
...
Рейтинг: 0 / 0
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
    #38486200
Shalfey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть запрос:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
SELECT SQL_CALC_FOUND_ROWS
 a.`Message_ID`,
 a.`User_ID`,
 a.`IP`,
 a.`UserAgent`,
 a.`LastUser_ID`,
 a.`LastIP`,
 a.`LastUserAgent`,
 a.`Priority`,
 a.`Parent_Message_ID`,
 a.`ncTitle`,
 a.`ncKeywords`,
 a.`ncDescription`,
 sub.`Subdivision_ID`,
 CONCAT( '', sub.`Hidden_URL`) as Hidden_URL,
 cc.`Sub_Class_ID`,
 cc.`EnglishName`,
 a.`Checked`,
 a.`Created`,
 a.`Keyword`,
 a.`LastUpdated` + 0 AS LastUpdated,
 a.Name,
 a.Vendor,
 a.ItemID,
 a.Price,
 tbl2571.ShopCurrency_Name AS Currency,
 tbl2571.ShopCurrency_ID AS Currency_id,
 tbl2571.`Value` AS Currency_value ,
 a.PriceMinimum,
 tbl2573.ShopCurrency_Name AS CurrencyMinimum,
 tbl2573.ShopCurrency_ID AS CurrencyMinimum_id,
 tbl2573.`Value` AS CurrencyMinimum_value ,
 a.Image,
 tbl2575.ShopUnits_Name AS Units,
 tbl2575.ShopUnits_ID AS Units_id,
 tbl2575.`Value` AS Units_value ,
 a.StockUnits,
 a.ImportSourceID,
 a.TopSellingMultiplier,
 a.TopSellingAddition,
 a.VAT,
 a.AmountOfTraffic,
 a.FullName,
 a.TimeWork,
 a.CountLicenses,
 a.OperatingSystem,
 a.Capacity,
 a.Language,
 a.TypeLicenses,
 a.TypeOrganization,
 a.ID_1C,
 a.DeliveryType,
 a.Articul,
 a.DescriptionProd,
 a.DecipheringLicense,
 a.Model,
 a.VendorCartridges,
 a.ProductAvailability,
 a.TypeCartridges,
 a.ForPrinters,
 a.Refillable,
 a.Compatibility,
 a.USD_Price,
 a.Price AS Price,
 a.Currency AS Currency
FROM (`Message2081` AS a )
LEFT JOIN `Subdivision` AS sub 
 ON sub.`Subdivision_ID` = a.`Subdivision_ID`
LEFT JOIN `Sub_Class` AS cc 
 ON cc.`Sub_Class_ID` = a.`Sub_Class_ID`
LEFT JOIN `Classificator_ShopCurrency` AS tbl2571 
 ON a.`Currency` = tbl2571.ShopCurrency_ID 
LEFT JOIN `Classificator_ShopCurrency` AS tbl2573
 ON a.`CurrencyMinimum` = tbl2573.ShopCurrency_ID
LEFT JOIN `Classificator_ShopUnits` AS tbl2575
 ON a.`Units` = tbl2575.ShopUnits_ID 
WHERE 1
 AND a.`Parent_Message_ID` = '0'
 AND sub.`Catalogue_ID` = '1'
 AND a.`Subdivision_ID` = '371' 
 AND a.`Sub_Class_ID` = '571'
 AND a.`Checked` = 1
 AND ( (a.Price>=1000 AND a.Price<=2000)
ORDER BY Message_ID LIMIT 0, 15



,также есть выборка на php, которая встраивает в запрос условия.

Пример условия в запросе:

Код: sql
1.
2.
AND ( (a.Price>=1000 AND a.Price<=2000)
 



но в поле:
Код: sql
1.
a.Price


вводятся данные в разной валюте и чтоб это учитывать необходимо умножить поле на курс, а потом производить выборку с актуальными числами

Пример умножения:

Код: sql
1.
2.
3.
4.
5.
6.
a.Price * ( 
  SELECT `Rate` 
  FROM `Message223` 
  WHERE `Currency`=a.`Currency` 
  ORDER BY MAX(`Message_ID`)
)



, но моих знаний не хватает чтоб правильно приравнять результат произведения, значения поля и подзапроса, полю a.Price

Есть ли варианты ?

P.S. Надеюсть теперь понятней оформил.
...
Рейтинг: 0 / 0
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
    #38486230
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShalfeyНадеюсть теперь понятней оформил.Да.

Итак, в структуре Message2081 имеется поле Currency. Имеется также таблица Message223, хранящая пары значений Rate - Currency, причём поле Currency неуникально, а актуальная запись имеет максимальный Message_ID.

Самым простым будет, вероятно, добавление в секцию FROM ещё одной таблицы - коррелированного подзапроса с как раз указанным текстом, и его использование для получения вычислимого поля. Т.е. что-то типа

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT SQL_CALC_FOUND_ROWS
 a.`Message_ID`,
 a.`User_ID`,
...
-- модифицируем формулу для поля
 a.Price * cr.Rate Price,
--
...
FROM `Message2081` AS a 
LEFT JOIN `Subdivision` AS sub 
...
 ON a.`Units` = tbl2575.ShopUnits_ID 
-- добавляем таблицу
, ( 
  SELECT m.`Rate` 
  FROM `Message223` m
  WHERE m.`Currency`=a.`Currency` 
  ORDER BY m.`Message_ID` DESC LIMIT 1
  ) cr
--
WHERE ...
...
Рейтинг: 0 / 0
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
    #38486232
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати.

1) Зачем SQL_CALC_FOUND_ROWS ?
2) Почему везде LEFT JOIN ?
...
Рейтинг: 0 / 0
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
    #38486244
Shalfey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо я попробую.

А запрос составляет движок NetCat, я только могу на него влиять.
...
Рейтинг: 0 / 0
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
    #38486253
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. вмешаться в текст и добавить условие можешь, а вмешаться и отрезать аппендикс - нет...
...
Рейтинг: 0 / 0
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
    #38487341
Shalfey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

да, если не ковырять движок, то так.

я попробывал ваш вариант решения проблемы, но он не помог - запрос возвращает пустой результат.

вероятно это происходит из-за условия выборки.

выборка выглядит примерно так:
Код: sql
1.
2.
3.
4.
5.
6.
...
WHERE 
...
AND (a.Price>=1000 AND a.Price<=2000)
...
ORDER BY Message_ID LIMIT 0, 15 



есть ли возможность умножать цену на курс валюты до того как вступит в силу условие на выборку, чтобы поле
Код: sql
1.
a.Price


попадало в условие запроса уже умноженным на курс ?
...
Рейтинг: 0 / 0
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
    #38487496
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. тебе надо учесть тип валюты в секции WHERE? А ты эту секцию модифицировать можешь?
Если нет - задача нерешаема.
...
Рейтинг: 0 / 0
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
    #38487535
Shalfey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Могу добавлять туда свой код, но выборка добавляется не зависимо от меня
...
Рейтинг: 0 / 0
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
    #38487567
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты можешь туда добавить свой код, скажем, так - было:

Код: sql
1.
2.
3.
4.
5.
WHERE 
...
AND (a.Price>=1000 AND a.Price<=2000)
...
ORDER BY Message_ID LIMIT 0, 15 



стало

Код: sql
1.
2.
3.
4.
5.
WHERE 
...
AND ((a.Price>=1000 AND a.Price<=2000 AND 0) OR ( a.Price * cr.Rate between 1000 AND 2000))
...
ORDER BY Message_ID LIMIT 0, 15 
...
Рейтинг: 0 / 0
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
    #38487568
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, стало
Код: sql
1.
2.
3.
4.
5.
WHERE 
...
AND ((a.Price>=1000 AND a.Price<=2000) OR ( a.Price * cr.Rate between 1000 AND 2000))
...
ORDER BY Message_ID LIMIT 0, 15 
...
Рейтинг: 0 / 0
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
    #38487573
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя зря я... вставка AND 0 таки нужна, а то будут попадать левые записи.
...
Рейтинг: 0 / 0
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
    #38487603
Shalfey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Я не смогу сгруппировать выборку и свой код

Выглядеть будет примерно так:

Код: sql
1.
2.
3.
4.
5.
WHERE 
...
AND ((a.Price>=1000 AND a.Price<=2000)) OR ( a.Price * cr.Rate between 1000 AND 2000)
...
ORDER BY Message_ID LIMIT 0, 15 
...
Рейтинг: 0 / 0
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
    #38487903
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну в общем покрути - мож к старому условию снаружи это AND False приверни - но от него НАДО избавиться.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]