我有一个看起来像这样的表(除了更多的条目),我需要从所有条目中获取 boatuid,其中 taxstatuscode = Paid 和 taxpaidtoname = NO。 但我无法让它工作。
表格:
boatuid slug fieldValue
20 taxstatuscode Paid
20 taxpaidtoname NO
24 taxstatuscode Paid
24 taxpaidtoname SE
25 taxstatuscode Not Paid
25 taxpaidtoname N/A
查询:
SELECT a.boatuid
FROM tx_gcnwnxmlparser_boats_specs
LEFT JOIN tx_gcnwnxmlparser_boats_specs a ON (a.slug = "taxstatuscode")
LEFT JOIN tx_gcnwnxmlparser_boats_specs b ON (b.slug = "taxpaidtoname")
WHERE a.boatuid IN(20,24,25)
AND a.fieldValue = "Paid"
AND b.fieldValue = "NO"
GROUP BY a.boatuid
现在它将返回 IN() 中的所有 boatuid,而它应该只返回 20。 我对 EAV 很陌生,所以我做错了什么?
最佳答案
使用 EAV 的关键之一是使用“实体 ID”加入,以便您选择的属性属于同一实体。
SELECT a.boatuid
FROM tx_gcnwnxmlparser_boats_specs a
INNER JOIN tx_gcnwnxmlparser_boats_specs b
ON a.boatuid = b.boatuid /* "Entity ID" join condition */
AND b.slug = 'taxpaidtoname'
WHERE a.boatuid IN (20,24,25)
AND a.slug = 'taxstatuscode'
AND a.fieldValue = 'Paid'
AND b.fieldValue = 'NO';
关于php - MySQL EAV 查询返回所有条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12177761/