이 질문은 original question에서 재고 관리 응용 프로그램과 관련하여 제안한 schema과 관련이 있습니다.EAV 기반 재고 관리 응용 프로그램에 대한 MySQL 자체 조인
특정 항목에 대한 현재 재고를 제공하는 MySQL 쿼리를 만들려고합니다.
쿼리가 작동하지만 필요한 정보를 얻는보다 효율적인 방법이 있는지 궁금해했습니다.
SELECT 's'.*,
'v1'.'attribute_id' AS 'att1',
'v1'.'value' AS 'val1'
'v2'.'attribute_id' AS 'att2',
'v2'.'value' AS 'val2'
FROM 'eav_ev' AS 'ev1'
INNER JOIN 'stock' AS 's' ON s.id = ev1.stock_id
INNER JOIN 'eav_ev' AS 'ev2' ON ev1.stock_id = ev2.stock_id
INNER JOIN 'eav_value' AS 'v1' ON v1.id = ev1.value_id
INNER JOIN 'eav_value' AS 'v2' ON v2.id = ev2.value_id
WHERE (ev1.entity_id = '45')
AND (ev1.value_id <> ev2.value_id)
AND (s.total > 0)
GROUP BY 'ev1'.'stock_id'
ORDER BY 'ev1'.'value_id' ASC
이
array (1) {
[0] => array(5) {
["stock_id"] => "2"
["att1"] => "3"
["val1"] => "M12"
["att2"] => "4"
["val2"] => "45"
}
}
그것은 매우 더러워 보이지만 불쌍한 내 뇌가 더 좋은 것을 함께 올라오고 불가능하다의 라인을 따라 뭔가를 반환합니다.
제안 사항?
이 문제는 각 행 (att1 및 att2)의 속성이 'eav_value'테이블의 위치에 따라 반대 방향으로 나타날 수 있습니다. 즉, 한 행의 att1이 다음 행의 att2 일 수 있습니다. 어떻게 예방할 수 있을지 모르겠습니다. –
나는 내가 의미했던 것에 대한 예를 추가했다. 'att1'을 사용하는 대신 실제'attribute_id'를 사용할 것입니다. 또는 속성의 이름조차도. – Wolph
답장 WoLpH에 감사드립니다. 코드에서 'SELECT v1.value_id AS $ attribute_1'을 읽거나 속성을 얻는 더 좋은 방법이 있습니까? 젠드 프레임 워크 (php) 사용하기. –