我正在选择属性并将它们加入映射表,在这些表中它们被映射到过滤器,例如位置、目的地和属性类型。
我的目标是获取所有属性,然后将它们 LEFT JOIN 加入表格,然后基本上获取显示所有位置、属性附加到的目的地和属性类型本身的数据。
这是我的查询:
SELECT p.slug AS property_slug,
p.name AS property_name,
p.founder AS founder,
IF (p.display_city != '', display_city, city) AS city,
d.name AS state,
type
GROUP_CONCAT( CONVERT(subcategories_id, CHAR(8)) ) AS foo,
GROUP_CONCAT( CONVERT(categories_id, CHAR(8)) ) AS bah
FROM properties AS p
LEFT JOIN destinations AS d ON d.id = p.state
LEFT JOIN regions AS r ON d.region_id = r.id
LEFT JOIN properties_subcategories AS sc ON p.id = sc.properties_id
LEFT JOIN categories_subcategories AS c ON c.subcategory_id = sc.subcategories_id
WHERE 1 = 1
AND p.is_active = 1
GROUP BY p.id
在我这样做之前GROUP BY
,GROUP_CONCAT
我的数据如下所示:
id name type category_id subcategory_id state
--------------------------------------------------------------------------
1 The Hilton Hotel 1 1 2 7
1 The Hilton Hotel 1 1 3 7
1 The BlaBla Resort 2 2 5 7
之后GROUP BY
它GROUP_CONCAT
变成...
id name type category_id subcategory_id state
--------------------------------------------------------------------------
1 The Hilton Hotel 1 1, 1 2, 3 7
1 The BlaBla Resort 2 1 3 7
这是一次性获取该属性的所有可能映射的首选方式GROUP_CONCAT
吗?像这样的 CSV?
使用这些数据,我可以渲染类似...
<div class="property" categories="1" subcategories="2,3">
<h2>{property_name}</h2>
<span>{property_location}</span>
</div>
然后使用 Javascript 来显示/隐藏基于用户是否单击具有说subcategory="2"
属性的锚点,它会隐藏每个属性值.property
中没有2
的属性。subcategories