我试图从postgresSQL中设置下列数据中获得最佳匹配。Postgres选择精确匹配ovet集合的行
数据集例如:(以下数据集属于父母或我要说的是我保持的表称为tbl_parent_meta_data动态父属性)
Filters: Brand=BMW, Wheels=17 & Model=B2017
根据上面的过滤器,SQL应该返回parentId的唯一匹配滤波器,即:9080 & 9082号文件
+----+----------+-------------+---------------+
| Id | AdId | MetaDataKey | MetaDataValue |
+----+----------+-------------+---------------+
| 1 | 9080 | Brand | BMW |
| 2 | 9080 | Wheels | 17 |
| 3 | 9080 | Model | B2017 |
| 4 | 9081 | Brand | BMW |
| 5 | 9081 | Wheels | 18 |
| 6 | 9081 | Model | B2016 |
| 7 | 9082 | Brand | Audi |
| 8 | 9082 | Wheels | 19 |
| 9 | 9081 | Model | A2016 |
| 10 | 9082 | Brand | BMW |
| 11 | 9082 | Wheels | 17 |
| 12 | 9082 | Model | B2017 |
+----+----------+-------------+---------------+
查询我用:这工作对我来说,我需要的替代品。
SELECT axd.ad_id adId
FROM ads_extradata axd
LEFT JOIN ads a on a.id = axd.ad_id
LEFT JOIN categories_translations ct ON ct.id = a.category_translation_id
LEFT JOIN categories_meta_data cmd ON cmd.id = axd.category_metadata_id
LEFT JOIN languages l ON l.id = ct.language_id
WHERE cmd.deleted = false AND ct.deleted = false AND a.deleted = false
AND axd.deleted = false
AND a.category_translation_id = '" . $categoryTranslation->getId() . "'
GROUP BY axd.ad_id
HAVING SUM(
CASE 'Brand' WHEN axd.extra_value::text THEN 10 ELSE 0 END +
CASE 'Wheels' WHEN axd.extra_value::text THEN 10 ELSE 0 END +
CASE 'Model' WHEN axd.extra_value::text THEN 10 ELSE 0 END) >= 30
你尝试过什么查询? –
谢谢Radu,我用我用过的查询更新了这个问题,结果很好。但是可以替代 – danyal14