我想SELECT
基于ID
值的字段。
Products
PRODUCT_ID Name
19 Chair
20 Table
Product_fields
ID PRODUCT_ID TYPE DESCRIPTION
1 19 C White
2 19 S Modern
3 20 C Black
4 20 S Classic
我需要一个结果:
Product Type_C Type_S
Chair White Modern
Table Black Classic
我能够在product_fields表上使用两个LEFT JOINs
生成此内容,但这会使查询速度过慢。还有更好的方法吗?
答案 0 :(得分:0)
减慢查询的速度是多少?什么是可以接受的?
如果您真的不想使用联接(您必须有一个联接),请使用视图或嵌套查询。但我不认为它们会更快,不过你可以尝试一下。
上的观看次数select p.PRODUCT_ID, p.Name, f.CDescription, f.SDescription
from Products p
join(
SELECT PRODUCT_ID, Max( CDescription ) as CDescription,
Max( SDescription ) as SDescription
FROM(
select PRODUCT_ID,
case Type when 'C' then Description end as CDescription,
case Type when 'S' then Description end as SDescription
from Fields
) x
group by PRODUCT_ID
) f
on f.PRODUCT_ID = p.PRODUCT_ID;
答案 1 :(得分:0)
完整的陈述是:
SELECT
NL.product_name,
PRD.product_sku AS product_sku,
CF.virtuemart_product_id AS virtuemart_product_id,
GROUP_CONCAT(distinct CFA.customsforall_value_name
ORDER BY CFA.customsforall_value_name ASC
separator ' | ' ) AS Name_exp_3,
ROUND((((prices.product_price * CALC.calc_value) / 100) + prices.product_price),
2) AS Prijs,
VMCF_L.custom_value AS latijn,
VMCF_T.custom_value AS THT
VMCF_B.custom_value AS Batch
from j25_virtuemart_products AS PRD
LEFT join j25_virtuemart_product_custom_plg_customsforall AS CF ON CF.virtuemart_product_id = PRD.virtuemart_product_id
join j25_virtuemart_product_prices AS prices ON PRD.virtuemart_product_id = prices.virtuemart_product_id
join j25_virtuemart_calcs AS CALC ON prices.product_tax_id = CALC.virtuemart_calc_id
join j25_virtuemart_products_nl_nl AS NL ON NL.virtuemart_product_id = PRD.virtuemart_product_id
LEFT join j25_virtuemart_product_customfields AS VMCF ON VMCF.virtuemart_product_id = PRD.virtuemart_product_id
LEFT join j25_virtuemart_custom_plg_customsforall_values AS CFA ON CFA.customsforall_value_id = CF.customsforall_value_id
LEFT JOIN j25_virtuemart_product_customfields AS VMCF_L ON VMCF.virtuemart_product_id = VMCF_L.virtuemart_product_id AND VMCF_L.virtuemart_custom_id = 16
LEFT JOIN j25_virtuemart_product_customfields AS VMCF_T ON VMCF.virtuemart_product_id = VMCF_T.virtuemart_product_id AND VMCF_T.virtuemart_custom_id = 3
LEFT JOIN j25_virtuemart_product_customfields AS VMCF_B ON VMCF.virtuemart_product_id = VMCF_B.virtuemart_product_id AND VMCF_B.virtuemart_custom_id = 18
WHERE
PRD.product_sku like '02.%'
group by PRD.virtuemart_product_id
order by NL.product_name;
其中名为'Latijn','THT'和'Batch'的三个SELECT结果是我之前比较为黑/白和经典/现代值的结果。 希望这有任何意义。 正如您所看到的,这涉及到Virtuemart的安装,因此我无法对模式进行多少讨论。
当我排除底部的3个JOINS并且存在相关的FIELDS时,查询大约需要0.5秒。包含JOINS和FIELDS后,查询大约需要19秒。
我从这个完整的查询中创建了一个视图,我从我的标签应用程序中查询。
答案 2 :(得分:0)
谢谢大家!根据您的输入我创建:
select
NL .
这里给AS
这里给,
PRD .
product_sku AS
product_sku ,
CF .
virtuemart_product_id {{ 1}} virtuemart_product_id AS
CFA ,
group_concat(distinct
customsforall_value_name .
CFA
order by
customsforall_value_name .
Name_exp_3 ASC
separator ' | ') AS
价格,
round((((
PRODUCT_PRICE {{1} } CALC .
calc_value *
价格.
PRODUCT_PRICE ) / 100) +
Prijs .
F到),
2) AS
Latijn ,
Latijn .
F到AS
THT ,
THT .
F到AS
批次,
批次.
j25_virtuemart_products AS
PRD
from
(((((((
j25_virtuemart_product_custom_plg_customsforall {{ 1}} CF CF
left join
virtuemart_product_id PRD
ON ((
virtuemart_product_id .
j25_virtuemart_product_prices =
价格.
PRD {{1} } virtuemart_product_id )))
join
价格 virtuemart_product_id
ON ((
j25_virtuemart_calcs .
CALC =
价格.
product_tax_id )))
join
CALC virtuemart_calc_id
ON ((
j25_virtuemart_products_nl_nl .
NL =
NL .
virtuemart_product_id )))
join
PRD virtuemart_product_id
ON ((
j25_virtuemart_product_customfields .
VMCF {{ 1}} {VMCF {1}} {virtuemart_product_id {1}} {PRD {1}} virtuemart_product_id {{1 }} j25_virtuemart_custom_plg_customsforall_values =
CFA .
CFA )))
left join
customsforall_value_id CF
ON ((
customsforall_value_id .
vw_batch_Latijn_THT_grouped =
F到.
˚F)))
left join
virtuemart_product_id PRD
ON ((
virtuemart_product_id .
PRD =
product_sku .
PRD )))
left join
virtuemart_product_id NL { {1}} product_name``
执行需要1.4秒,比我开始的19秒快一点。