Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите модернизировать запрос (присвоить столбцу результат подзапроса) / 17 сообщений из 17, страница 1 из 1
02.12.2013, 14:08:19
    #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
02.12.2013, 14:21:01
    #38485992
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
Он издевается?
...
Рейтинг: 0 / 0
02.12.2013, 14:29:04
    #38486000
Shalfey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
Akina,

А что SQL не позволяет производить подобные операции?
...
Рейтинг: 0 / 0
02.12.2013, 14:51:26
    #38486025
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
Я имею в виду оформление вопроса.
Посмотри другие темы. Как люди форматируют запросы. Какие теги используют.
А в твоей лапше разбираться нет никакого желания. И искать, где ты там, что и каким цветом выделил.
...
Рейтинг: 0 / 0
02.12.2013, 16:45:35
    #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
02.12.2013, 17:03:49
    #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
02.12.2013, 17:04:59
    #38486232
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
Кстати.

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

А запрос составляет движок NetCat, я только могу на него влиять.
...
Рейтинг: 0 / 0
02.12.2013, 17:11:36
    #38486253
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
Т.е. вмешаться в текст и добавить условие можешь, а вмешаться и отрезать аппендикс - нет...
...
Рейтинг: 0 / 0
03.12.2013, 13:56:29
    #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
03.12.2013, 15:10:28
    #38487496
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
Т.е. тебе надо учесть тип валюты в секции WHERE? А ты эту секцию модифицировать можешь?
Если нет - задача нерешаема.
...
Рейтинг: 0 / 0
03.12.2013, 15:27:01
    #38487535
Shalfey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
Akina,

Могу добавлять туда свой код, но выборка добавляется не зависимо от меня
...
Рейтинг: 0 / 0
03.12.2013, 15:39:14
    #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
03.12.2013, 15:40:02
    #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
03.12.2013, 15:41:05
    #38487573
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
Хотя зря я... вставка AND 0 таки нужна, а то будут попадать левые записи.
...
Рейтинг: 0 / 0
03.12.2013, 15:54:01
    #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
03.12.2013, 18:28:22
    #38487903
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите модернизировать запрос (присвоить столбцу результат подзапроса)
Ну в общем покрути - мож к старому условию снаружи это AND False приверни - но от него НАДО избавиться.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите модернизировать запрос (присвоить столбцу результат подзапроса) / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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