从mysql

时间:2018-04-25 18:33:47

标签: mysql

我正在尝试创建一个可以搜索的查询 在产品标签和/或产品属性值中。

就表格而言,我有:

  • 产品
  • product_has_attribute(将产品绑定到attribute_name和attribute_value)
  • ATTRIBUTE_VALUE
  • attribute_name(我的查询不需要)

我几乎在那里,我想我应该使用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"。

如何在产品标签和产品属性中搜索我的查询?

1 个答案:

答案 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