我正在尝试创建一个可以搜索的查询 在产品标签和/或产品属性值中。
就表格而言,我有:
我几乎在那里,我想我应该使用group_concat, 但是我在子查询中遇到了一个条件。
这是我到目前为止所得到的:
select
p.id,
p.label,
(
select
group_concat( distinct label separator ', ')
from (
select
v.label
from attribute_value v
inner join product_has_attribute h on h.attribute_value_id=v.id
) as ttt
) as attr_values
from product p
having
label like :search
or attr_values like :search
这在产品标签中搜索时并不算太糟糕,但此查询的问题在于搜索 在所有属性值中,但我只想搜索当前产品的属性值, 所以我试过了:
select
p.id,
p.label,
(
select
group_concat( distinct label separator ', ')
from (
select
v.label
from attribute_value v
inner join product_has_attribute h on h.attribute_value_id=v.id
where h.product_id=p.id
) as ttt
) as attr_values
from product p
having
label like :search
or attr_values like :search
但现在它说:"未知列p.id"。
如何在产品标签和产品属性中搜索我的查询?
答案 0 :(得分:1)
只需删除额外不必要的SELECT级别。 MySQL应该允许从一个级别引用外部查询。将其深入(两个或更多级别),它不能被引用。
将attr_values
设为一个相关的子查询...只需一个SELECT
。
这样的事情:
SELECT p.id
, p.label
, ( SELECT GROUP_CONCAT(DISTINCT v.label ORDER BY v.label SEPARATOR ', ')
FROM attribute_value v
JOIN product_has_attribute h
ON h.attribute_value_id = v.id
WHERE h.product_id = p.id
) AS attr_values
FROM product p
HAVING p.label LIKE :search
OR attr_values LIKE :search